发表于: 2019-10-09 23:51:43
1 883
今日完成的事
优化了我的代码,重新整理了下我的思路。继续学习angular,今天学习了路由守卫
任何用户都能在任何时候导航到任何地方。 但有时候这样是不对的。
该用户可能无权导航到目标组件。
可能用户得先登录(认证)。
在显示目标组件前,你可能得先获取某些数据。
在离开组件前,你可能要先保存修改。
你可能要询问用户:你是否要放弃本次更改,而不用保存它们?
你可以往路由配置中添加守卫,来处理这些场景。
守卫返回一个值,以控制路由器的行为:
守卫可以用同步的方式返回一个布尔值。但在很多情况下,守卫无法用同步的方式给出答案。 守卫可能会向用户问一个问题、把更改保存到服务器,或者获取新数据,而这些都是异步操作。
因此,路由的守卫可以返回一个 Observable<boolean>
或 Promise<boolean>
,并且路由器会等待这个可观察对象被解析为 true
或 false
。
注意: 提供给路由器的可观察对象还必须能结束(complete)。否则,导航就不会继续。
路由器可以支持多种守卫接口:
用
CanActivate
来处理导航到某路由的情况。用
CanActivateChild
来处理导航到某子路由的情况。用
CanDeactivate
来处理从当前路由离开的情况.CanDeactivate
to mediate navigation away from the current route.用
Resolve
在路由激活之前获取路由数据。用
CanLoad
来处理异步导航到某特性模块的情况。
在分层路由的每个级别上,你都可以设置多个守卫。 路由器会先按照从最深的子路由由下往上检查的顺序来检查CanDeactivate()
和 CanActivateChild()
守卫。 然后它会按照从上到下的顺序检查 CanActivate()
守卫。 如果特性模块是异步加载的,在加载它之前还会检查 CanLoad()
守卫。 如果任何一个守卫返回 false
,其它尚未完成的守卫会被取消,这样整个导航就被取消了。
接下来的小节中有一些例子。
CanActivate: 要求认证
应用程序通常会根据访问者来决定是否授予某个特性区的访问权。 你可以只对已认证过的用户或具有特定角色的用户授予访问权,还可以阻止或限制用户访问权,直到用户账户激活为止。
CanActivate
守卫是一个管理这些导航类业务规则的工具。
明天计划的事
继续学习angular,开始写任务六的分页
遇到的困难
越学angular越觉得angular好难
收获
学习到了路由守卫
评论