AngularJs学习笔记-路由

路由

(1)routerLink用[]括起来的时候传递的是数组,

如:

<a [routerLink]="['/hero', hero.id]"> <span class="badge">{{ hero.id }}</span>{{ hero.name }} </a>

表示带参数的路由地址,可以导航到/hero/:heroId

<a [routerLink]="[{ outlets: { popup: ['contact'] } }]" routerLinkActive="active" >Contact</a>

表示将辅助路由popup的视图导航到contact上,

上面的routerLinkActive 指令会基于当前的 RouterState 为活动的 RouterLink 切换所绑定的 css 类,

路由链接的激活状态会向下级联到路由树中的每个层级,所以,父子路由链接可能会同时激活。

要覆盖这种行为,可以把 [routerLinkActiveOptions] 绑定为 { exact: true } 表达式,

这样 RouterLink 只有当 URL 与当前 URL 精确匹配时才会激活。

 

 

(2)routerLink直接使用时直接使用路径的格式,不需使用数组:

<a routerLink="/crisis" routerLinkActive="active" >Crisis Center</a>

 

(3)路由参数传递的三种形式

1、<a [routerLink]="['/product']" [queryParams]="{id: 1}" ></a>

2、

3、

 

 

 

 

(4)路由跳转时当组件跳到自身时,组件不会重复创建,ngOnInit方法不会被重复执行,所以如果

在ngOnInit方法中使用路由快照的形式获取参数,则数据只会获取一遍 

this.id = this.routerInfo.snapshot.params["id"] (routerInfo: ActivatedRoute)

应该采用rxjs订阅方式实现异步获取数据

this.routerInfo.params.subscribe((params: Params) =>  this.id = params["id"] )

 

(5) Router.navigate与[routerLink]的使用方式相同,如this.router.navigate(["/heroes",{id: this.hero.id}]);

 

(6) 辅助路由

1、配置辅助路由

<router-outlet name="popup"></router-outlet>指定路由名称为popup

 

{path: 'contact', component: MessageComponent, outlet: "popup"}加上outlet属性

 

<a [routerLink]="[{ outlets: { popup: ['contact'] } }]" routerLinkActive="active" >Contact</a>设置路由导航链接

 

2、将辅助路由置空的方式:this.router.navigate([{outlets: {popup: null}}]);

3、指定辅助路由的同时指定主路由

<a [routerLink]="[{ outlets: { primary:['home'], popup: ['contact'] } }]" routerLinkActive="active" >Contact</a>

 

(7)相对导航

路由器支持在链接参数数组中使用“目录式”语法来为查询路由名提供帮助:

./ 或 无前导斜线 形式是相对于当前级别的。

../ 会回到当前路由路径的上一级。

 

(8)路由守卫

canActivate: 要求认证

canDeactivate:处理未保存的更改

Resolve:当需要所有必要数据都已经拿到之后,才渲染路由组件时,使用Resolve守卫,

当获取数据失败时,可以通过Resolve守卫跳转回原来的路径或进行其它失败处理

https://angular.cn/guide/router#milestone-5-route-guards

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-02-11 15:38  段智兴  阅读(120)  评论(0编辑  收藏  举报