路由注册
<router-outlet></router-outlet>
是 angular 路由的占位元素,表示要把对应的路由组件渲染到router-outlet
中
使用angular router
的项目,需使用<a routerLink="/crisis-center">Crisis Center</a>
的形式,才能在 angular
内部跳转
html
|
把 RouterModule.forRoot()
注册到 AppModule
的 imports
数组中,能让该 Router
服务在应用的任何地方都能使用。
module
|
forRoot
在一个 angular 项目中只能出现一次,如果想在其他模块中在引入子路由,应使用forChild
配置路由跳转规则
添加一个 redirect
路由,把最初的相对 URL('')
转换成所需的默认路径(/heroes)
。'**'
表示没有任何匹配时,跳转到对应的没有页面提示
|
路由模块
声明一个路由文件
src/app/app-routing.module.ts
|
src/app/app.module.ts
|
路由参数
|
|
如何在对应的组件中拿到 id
的参数
|
当这个 map
发生变化时,paramMap
会从更改后的参数中获取 id
参数。
当用户从一个详情列表跳转到另一个详情列表中时,angular 会复用这个组件,所以需要订阅 router 对象的变化,才能出发详情列表路由参数的变化
activateRouter
监听ActivatedRoute
也能拿到路由的参数值
|
sanpshot
本应用不需要复用 HeroDetailComponent
。用户总是会先返回英雄列表,再选择另一位英雄。所以,不存在从一个英雄详情导航到另一个而不用经过英雄列表的情况。这意味着路由器每次都会创建一个全新的 HeroDetailComponent
实例。
假如你很确定这个 HeroDetailComponent
实例永远不会被复用,你可以使用 snapshot。
|
用这种技术,
snapshot
只会得到这些参数的初始值。如果路由器可能复用该组件,那么就该用paramMap
可观察对象的方式。本教程的示例应用中就用了paramMap
可观察对象。
第二路由
使用 2 个router-outlet
,但是彼此并不互相影响
|
注册第二路由module
|
如何跳转到第二路由
|
因为第二路由与主路由不相互影响,即使在主路由发生变化时,第二路由显示的组件也不会消失,所以适用于:需要一直显示的组件,比如弹窗,需要在不同的页面都显示
那么如何清除第二路由
|
路由守卫
守卫接口 | 详情 |
---|---|
CanActivate | 导航到某路由时介入 |
CanActivateChild | 导航到某个子路由时介入 |
CanDeactivate | 从当前路由离开时介入 |
Resolve | 在某路由激活之前获取路由数据 |
CanLoad | 导航到某个异步加载的特性模块时介入 |
守卫返回的值 | 详情 |
---|---|
true | 导航过程会继续 |
false | 导航过程就会终止,且用户留在原地。 |
UrlTree | 取消当前导航,并开始导航到所返回的 UrlTree |
|
路由懒加载
|
预加载
这项配置会让 Router
预加载器立即加载所有惰性加载路由(带 loadChildren
属性的路由)。
|
参考
- 本文作者: luckyship
- 本文链接: https://luckyship.github.io/2022/07/09/2022-07-09-angular-router/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!