当前位置:  开发笔记 > 编程语言 > 正文

Angular2:如何为多个组件提供相同的防护

如何解决《Angular2:如何为多个组件提供相同的防护》经验,为你挑选了1个好方法。

在Angular2中,是否可以具有可以应用于多个组件的相同防护(例如CanActivate或CanDeactivate)?

这是一个警卫MyComponent1

@Injectable()
export class MyGuard implements CanDeactivate {

  canDeactivate(component: MyComponent1): Promise {
    // my code here
  }
}

我想要完全相同的后卫MyComponent2MyComponent3等等。

我该如何实施呢?我需要按组件声明新的防护类,还是可以重用我的类MyGuard



1> Günter Zöchb..:

只需向要应用该路由的每个路由添加相同的防护。

或者,您也可以在添加保护的地方创建一个无组件的父路由,所有子路由都将由相同的保护来保护。仅当组件全部处于同级路由中时,此方法才有效。

Angular DI不支持泛型类型参数。作为解决方法,这应该做您想要的(事件可能比您想要的更冗长):

routes: [
  { path: 'x', component: MyComponent1, canDeactivate: [new Inject('CanDeactivateMyComponent1') },
  { path: 'y', component: MyComponent2, canDeactivate: [new Inject('CanDeactivateMyComponent2') },

]


@NgModule({
  providers: [
    {provide: 'CanDeactivateMyComponent1', useFactory: () => new CanDeactivate()},
    {provide: 'CanDeactivateMyComponent2', useFactory: () => new CanDeactivate()},

  ],
})
export class AppModule {}
  ...
})


我认为@ElJackiste的疑问在于Guard实现所需的Type。这是一个很好的答案,但可能不是他正在等待的答案。
推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有