Angular2提供了2种组件,Guard
和Resolve
。Guard
用来保护一个路径。可以用来判断用户只有在满足一定条件情况下才能打开这个路径对应的页面。Resolve
用来在进入某个路径之前先获取数据。
Guard
Guard
其实是一系列接口,只要你实现了他的方法,配置了这些Guard,框架就会根据这个方法返回的true和false来判断是否激活这个路由。它包括几种类型:
- CanActivate:这种类型的
Guard
用来控制是否允许进入当前的路径。 - CanActivateChild:这种类型的
Guard
用来控制是否允许进入当前的路径的所有子路径。 - CanDeactivate:用来控制是否能离开当前路径进入其他路径。
- CanLoad:用于控制一个异步加载的子模块是否允许被加载。
Resolve
这跟Angular1中ui-router
库的resolve
类似,就是用来在打开一个页面之前先获取数据,而不是进入页面以后再加载。这个接口中的方法,可以返回任意的对象,也可以返回一个Promise
,或者Observable
。
如果在一个路径上同时设置了CanActivate
和Resolve
,首先CanActivate
接口的方法会被执行,当这个路由可以被激活时,Resolve接口的方法才会被执行。