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我们了么, ...
随机推荐
- C#基础篇 - 理解委托和事件
1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针.简单理解,委托是一种可以把函数当做参数传递的类型.很多情况下,某 ...
- ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求
我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMidd ...
- Oracle安装部署,版本升级,应用补丁快速参考
一.Oracle安装部署 1.1 单机环境 1.2 Oracle RAC环境 1.3 Oracle DataGuard环境 1.4 主机双机 1.5 客户端部署 二.Oracle版本升级 2.1 单机 ...
- Java程序员:工作还是游戏,是该好好衡量一下了
前阵子我终于下定决心,删掉了硬盘里所有的游戏. 身为一个程序猿,每天都要和各种新技术打交道,闲暇时间,总还得看一下各大论坛,逛逛博客园啥的,给自己充充电.游戏的话,其实我自小就比较喜欢,可以算是一种兴 ...
- HIVE教程
完整PDF下载:<HIVE简明教程> 前言 Hive是对于数据仓库进行管理和分析的工具.但是不要被“数据仓库”这个词所吓倒,数据仓库是很复杂的东西,但是如果你会SQL,就会发现Hive是那 ...
- ionic第二坑——ionic 上拉菜单(ActionSheet)安卓样式坑
闲话不说,先上图: 这是IOS上的显示效果,代码如下: HTML部分: <body ng-app="starter" ng-controller="actionsh ...
- SQL-类型转换函数
CAST ( expression AS data_type)CONVERT ( data_type, expression,[style]) Select '您的班级编号'+ 1 错误这里+是数学 ...
- 数据分布转换:非正态 -> 正态
来源:丁香园论坛:SPSS上的把非正态分布数据转换为正态分布数据 一楼 可以应用变量变换的方法,将不服从正态分布的资料转化为非正态分布或近似正态分布.常用的变量变换方法有对数变换.平方根变换.倒数变换 ...
- 进程监控工具supervisor 启动Mongodb
进程监控工具supervisor 启动Mongodb 一什么是supervisor Superviosr是一个UNIX-like系统上的进程监控工具. Supervisor是一个Python开发的cl ...
- 《徐徐道来话Java》(1):泛型的基本概念
泛型是一种编程范式(Programming Paradigm),是为了效率和重用性产生的.由Alexander Stepanov(C++标准库主要设计师)和David Musser(伦斯勒理工学院CS ...