我有一个canDeactivate保护程序来检查路由(组件)是否可以停用。当我在路上使用它的时候,效果很好。
const routes: Routes = [
{ path: '', component: MyComponent, canDeactivate: [MyGuard] }
]我希望这个canDeactivate保护被应用在我的应用程序中的所有路径上,不管它们是否是延迟加载/预加载/加载应用程序。
注意:我不想在我所有的路线上给这个警卫写信。
是否有任何可观察的,EvenEmitter或其他的东西,我可以订阅和更新路线,通过遍历所有的路线?
而且,任何遍历遍历所有路由的代码都是有帮助的。
注意:当子路由更改时, CanDeactivate不会被调用。
谢谢!
发布于 2021-12-08 09:58:02
{
path: '',
component: LayoutBasicComponent,
canActivate: [AuthGuard],
canDeactivate: [CanLeaveProvide],
runGuardsAndResolvers: 'paramsOrQueryParamsChange',
children: [
{ path: '/path1', component: MyComponent1 }
]
},发布于 2018-09-14 09:25:17
像这样的事情可以完成任务:
const routes: Routes = [
{ path: '', canDeactivate: [MyGuard], children: [
{ path: 'cmp1', component: MyComponent1 },
{ path: 'cmp2', component: MyComponent2 },
{ path: 'lazy', loadChildren: './modules/lazy/lazy.module#LazyModule' },
] },
];只需添加一个根路由和所有其他路由作为它的子路由。
发布于 2021-12-15 17:02:37
我已经找到了一种替代的方法,在中添加一个保护,动态地添加到,任何来自任何组件的路由或子组件(这是非常有用的)。
例如,您可以创建自己的保护机制,这将防止您在此link之后出现意外的窗口关闭。
考虑到这个例子,假设这个守卫名为:"DownloadCenterGuard".它的目的是防止您的浏览器关闭,如果下载正在运行。
但是作为一个角度的开发人员,实际的问题是您的DownloadCenterComponent是一个深子组件,它不知道它包含在哪个主组件中(并且您不想手动将保护添加到所有路由中)。
所以真正的问题是:,我们如何才能在角度上做到这一点?(它非常适合于角度12和更低的角度,以证实未来版本)
从您的子组件(在您的应用程序的任何位置)中,将ActivatedRoute注入构造函数:
@Component(...)
export class DownloadCenterComponent implements OnDestroy {
constructor(
private _activatedRoute: ActivatedRoute
) {
// You could do the same for the "canActivate" property.
this._activatedRoute.routeConfig.canDeactivate = [
...this._activatedRoute.routeConfig.canDeactivate,
DownloadCenterGuard
];
}
ngOnDestroy() {
// Remove the dynamically added guard at component destroying.
this._activatedRoute.routeConfig.canDeactivate = [
...this._activatedRoute.routeConfig.canDeactivate.filter(guard => guard !== DownloadCenterGuard)
]
}
}tadaaam,这在任何地方都没有记载,而且它可能在任何时候都得不到角质小组的支持。因此,尽量少使用,,只有您没有其他选择(在我看来)。
https://stackoverflow.com/questions/52328811
复制相似问题