首页 > 解决方案 > 当queryParams改变时如何触发can-deactivate-guard?

问题描述

我在 app-routing 模块中使用以下路由:

path: "overview",
component: OverviewComponent,
children: [
    { path: 'edit', component: DetailComponent, canDeactivate: [CanDeactivateGuardService] }
]

我的问题是canDeactivate只触发一次,从/overview/overview/edit。我理解那部分,因为路由内部的孩子的路径。

我的问题是,canDeactivate当 queryParams 在edit路径内发生变化时触发触发的正确解决方案是什么?例如,将 url 从 更改/edit?id=1/edit?id=2也应该触发canDeactivate

是否有可以从路由模块内部实现的简单解决方案?
如果没有,你有什么建议?
请记住,我仍在学习角度。

标签: angulartypescriptangular2-routingcandeactivate

解决方案


您可以通过在路由器配置上设置RunGuardsAndResolvers属性来定义何时运行警卫和解析器。

path: "overview",
component: OverviewComponent,
children: [
    { path: 'edit',  runGuardsAndResolvers: 'pathParamsOrQueryParamsChange', component: DetailComponent, canDeactivate: [CanDeactivateGuardService] }
]

推荐阅读