Angular2 小贴士 RouterLink 导航
AngularJS的路由一直是学习的一大难点,我们只能边看边学边掌握,边看边学边推翻。今天我们来看一下在angular2中通过routerLink实现导航的几种方式,以及各自的优缺点。
Angular2的路由模块来自@angular/router,这不包含在angular2的核心模块中。所以如果我们想要学习angular2的路由功能,必须导入该模块。
我们自己的最佳实践就是不断的推翻自己的过程,痛苦并痛苦着。
我自己总结的几种导航方式:
1 <a routerLink='/dashboard/home' routerLinkActive='active'>Home1</a>
2 <a routerLink='/dashboard/home' [routerLinkActive]="['active']">Home2</a>
3 <a routerLink='../home' routerLinkActive="active">Home 2.2 </a>
4 <a [routerLink]="['/dashboard/home']" [routerLinkActive]="['active']">Home3</a>
5 <a [routerLink]="['../home']" [routerLinkActive]="['active']">Home4</a>
6 <a [routerLink]="['../home']" [routerLinkActive]="['active']">Home5</a>
7
8 <a [routerLinkActive]="['active']" (click)="onSelect()">Home6</a>
onSelect()方法:
import { Component, OnInit } from '@angular/core';
import { Route, Router, ActivatedRoute, Params } from '@angular/router';
import 'rxjs/add/operator/switchMap';
@Component({
templateUrl: './chart.component.html'
})
export class ChartComponent implements OnInit {
constructor(private route: ActivatedRoute, private router: Router) {
}
ngOnInit() {
console.log(this.route.params['id']);
}
onSelect() {
this.router.navigate(['../home'],{relativeTo:this.route});
}
}
现在我们来逐个分析一下这些可以导航的方式:
- <a routerLink='/dashboard/home' routerLinkActive='active'>Home1</a>
所有以斜线开头的都必须使用绝对路径来进行导航。也就是说我们会导航到www.app.com/dashboard/home 这个路径,这个路径是绝对的。一般我们不会使用这种方式。如果不使用绝对路径,一定谨记不要以斜线开头。 - <a routerLink='/dashboard/home' [routerLinkActive]="['active']">Home2</a>
可能咋一看这个和第一条是一样的,但是请我们看routerLinkActive,第一条是单独的一个属性,而第二条作为一个属性指令来使用。还有一个重点,如果我们使用属性指令,在给属性指令赋值的时候,必须在中括号内在加入一个单引号。这是为什么?因为如果我们不加这个单引号或双引号,那么angular会认为这是一个变量,会当做变量来使用。 - <a routerLink='../home' routerLinkActive="active">Home 2.2 </a>
可以看到这个routerLink使用的是相对路径,可以参考第七条,相对路径,是相对的哪个路径,其实就是当前路由。以当前路由作为起点进行相对导航。举个简单的例子,我们当前的路径为/dashboard/chart,现在我们要导航到home(背景:chart和home都是dashboard下的一个组件,属于平级),那么我们就要使用两个点号..来表示。一个点号表示相对当前路径,两个点号就是相对父路径。 - <a [routerLink]="['/dashboard/home']" [routerLinkActive]="['active']">Home3</a>
通过指令方式来进行导航,可以参考第一条。绝对路径导航 - <a [routerLink]="['../home']" [routerLinkActive]="['active']">Home4</a>
通过指令方式进行导航,可以参考第一条和第三条,采用的routerLink指令和相对路径方式。 - <a [routerLink]="['./home']" [routerLinkActive]="['active']">Home5</a>
和第五条相同 - <a [routerLinkActive]="['active']" (click)="onSelect()">Home6</a>
通过angular脚本方式进行导航。this.router.navigate(['../home'],{relativeTo:this.route}); 如果要使用相对导航,必须加上relativeTo属性,并且赋值为route,route是ActivatedRoute的值。 如果采用绝对路径,那么不需要添加这个属性。如果以斜线开头,并且定义了这个relativeTo属性会出现什么的?其实还是绝对路径优先,relativeTo没有起作用。
通过我们的简单分析,我们来看一下,我们一般会采用哪种方式进行导航?
一般我们不会直接定义绝对路径的方式进行导航,这有很多原因:1.绝对路径很长的时候很容易写错 2.不容易移植。
那么采用相对路径,其实也存在很多问题:1.由于angular2的组件可复用,并且可嵌套,我们如果要导航到一个组件,由于我们的父子关系,可能会出现导航相对路径不一致的情况。
由于angular2的路由存在嵌套关系,并且可以重复嵌套相同组件到不同层级,这就导致我们的组件复用度远没有我们想象的那么广泛。
其实就我个人而言,我更倾向于采用一个服务的方式提供绝对路径前缀,我们在导航时动态的拼接成绝对路径的方式。
如果你有更好的方式,欢饮评论提供建议。
路由动画、路由拦截等其他功能我们下次再聊。再看一遍睡觉
Angular2 小贴士 RouterLink 导航的更多相关文章
- Angular2 小贴士 Name
Angular2 正式版已经发布了一个月了,我也是通过各种方式在进行验证是否可以满足我们的需求,今天我就发现了一个问题.现在我们来一起说明一下,这个可能不算是bug,而应该需要我们记住就可以了. 我们 ...
- Angular2 小贴士-多级注入器
angular2 的依赖注入包含了太多的内容,其中的一个重点就是注入器,而注入器又非常难理解,今天我们不深入介绍注入器的内容,可以参考官方文档,我们今天来说注入器的层级. 也就是组件获取服务的容器会选 ...
- Angular2 小贴士 NgModule 模块
angular2 具有了模块的概念,响应了后台程序的号召,高内聚 低耦合.模块就是用来进行封装,进行高内聚 低耦合的功能. 其实各人认为ng2 的模块和.net的工程类似,如果要使用模块中定义的功能 ...
- 【小贴士】虚拟键盘与fixed带给移动端的痛!
前言 今天来公司的主要目的就是研究虚拟键盘与fixed的问题,期间因为同事问起闭包与事件委托(阻止冒泡)相关问题,便穿插了一篇别的: [小贴士]工作中的”闭包“与事件委托的”阻止冒泡“,有兴趣的朋友可 ...
- SVN小贴士
我辛辛苦苦写的到哪里了? SVN小贴士SVN服务器上的代码项目组公用,你的每一个提交都会体现给项目组每个人,所以提交要慎重,要注意避免代码冲突,使用SVN小贴士: 1.提前宣布开发计划,保持项目组成员 ...
- android性能小贴士 翻译
转自http://developer.android.com/training/articles/perf-tips.html 性能小贴士: 这篇文档主要一些微优化可以提升应用程序性能,但是这些改变不 ...
- 小贴士——提高PHP程序在NGINX代理服务器的性能
NGINX本身就是面向最大性能的代理服务器,因此在使用NGINX,并没有性能调整的配置工作.但是却有很多选项可用于定制NGINX的行为,利用底层硬件和操作系统. 下面将介绍用于提供PHP在NGINX的 ...
- jprofiler8使用小贴士
说明:本文的小贴士是针对jprofiler8的,其他版本上可能有不适用的地方 贴士一:使用jpenable监控,无需增加jvm参数和重启 贴士一:使用jpenable监控,无需增加jvm参数和重启 j ...
- 初识bd时的一些技能小贴士
既然小豆腐如此给力,而且充分的利用主动学习的优势,已经有了迅速脑补,压倒式的优势,不过这只是表面而已,一切才刚刚开始,究竟鹿死谁手,还有待验证. 以上可以看到,小豆腐为什么拼命的要teach我们了么, ...
随机推荐
- Android数据加密之Base64编码算法
前言: 前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算 ...
- MAC下 mysql不能插入中文和中文乱码的问题总结
MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- Javascript 代理模式模拟一个文件同步功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- java常用的设计模式
设计模式:一个程序员对设计模式的理解:"不懂"为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的"复杂"恰恰就是设计模式的精髓所 ...
- ES6之let命令详解
let与块级作用域 { var foo='foo'; let bar='bar'; } console.log(foo,'var'); //foo varconsole.log(bar ,'bar') ...
- BPM合同管理解决方案分享
一.方案概述合同是组织与组织间所订协议的法律 表现形式,体现着双方对于合作在法律和道德上的承诺.然而,大多数企业的合同管理都或多或少存在合同审批过程不规范.签订草率.审批权责不清.合同执行跟踪难.合同 ...
- 听H3絮叨:何以让天下没有难用的流程
最近朋友圈.网站新闻铺天盖地是"让天下没有难用的流程",有人就要问了,H3 BPM何德何能,为BPM站台,让天下没有难用的流程? 这是一个关于"办公室空想"的故 ...
- C#中实现并发的几种方法的性能测试
C#中实现并发的几种方法的性能测试 0x00 起因 去年写的一个程序因为需要在局域网发送消息支持一些命令和简单数据的传输,所以写了一个C/S的通信模块.当时的做法很简单,服务端等待链接,有用户接入后开 ...
- mysql集群(主从)
本文主要记录mysql 主从配置. 经典的原理图 0.环境: 采用阿里云ECS服务器,同区同配置,操作系统为ubuntus 14 64位,服务器如下: 服务器A: 内网IP: 10.44.94.219 ...