CanLoad
一个接口,某些类可以实现它以扮演一个守卫,来决定该路由的子路由能否加载。
Interface that a class can implement to be a guard deciding if a children can be loaded.
interface CanLoad {
canLoad(route: Route, segments: UrlSegment[]): Observable<boolean> | Promise<boolean> | boolean
}
说明
- class UserToken {}
- class Permissions {
- canLoadChildren(user: UserToken, id: string, segments: UrlSegment[]): boolean {
- return true;
- }
- }
-
- @Injectable()
- class CanLoadTeamSection implements CanLoad {
- constructor(private permissions: Permissions, private currentUser: UserToken) {}
-
- canLoad(route: Route, segments: UrlSegment[]): Observable<boolean>|Promise<boolean>|boolean {
- return this.permissions.canLoadChildren(this.currentUser, route, segments);
- }
- }
-
- @NgModule({
- imports: [
- RouterModule.forRoot([
- {
- path: 'team/:id',
- component: TeamCmp,
- loadChildren: 'team.js',
- canLoad: [CanLoadTeamSection]
- }
- ])
- ],
- providers: [CanLoadTeamSection, UserToken, Permissions]
- })
- class AppModule {}
你还可以转而提供一个具有 canLoad
签名的函数:
You can alternatively provide a function with the canLoad
signature:
- @NgModule({
- imports: [
- RouterModule.forRoot([
- {
- path: 'team/:id',
- component: TeamCmp,
- loadChildren: 'team.js',
- canLoad: ['canLoadTeamSection']
- }
- ])
- ],
- providers: [
- {
- provide: 'canLoadTeamSection',
- useValue: (route: Route, segments: UrlSegment[]) => true
- }
- ]
- })
- class AppModule {}
方法
参数
返回值
|