【发布时间】:2019-10-08 18:53:01
【问题描述】:
我有一个场景,我有一条路线
<a routerLink="/crisis-center" routerLinkActive="active">Crisis Center</a>
在控制器中我想取消基于值的路由导航。
export class HeroListComponent implements OnInit {
cancelRoute : boolean = true
constructor(
//some logic where before the route is navigated to, I want it to cancel the route
// and log a message to console
//console.log('successfully, canceled route');
) {}
编辑
我不希望通过 Route Guard 完成此操作,我希望在组件级别完成此操作。我在页面上有一个组件,我想取消路线导航。
这是我的用例。
我有一个包含多个组件的页面,如果有人离开该页面,我想检查组件 A 并确保在他们离开之前没有任何未保存的数据。
编辑 2
“我不希望通过 Route Guard 完成此操作”。为什么?这本质上就是 CanDeactivate 守卫存在的目的。您绝对可以轻松地将它用于您的用例。
如果我错了,请纠正我,但我需要将 CanDeactivateGuard 放在例如每条路线上
RouterModule.forRoot([
{
path: 'team/:id',
component: TeamComponent,
canDeactivate: ['canDeactivateTeam']
}
我不想在每条路线上都有 CanDeactivate,当只有 1 条路线时
里面有foo 组件。
路由很多,只有一个路由需要foo组件,需要可以取消路由导航。据我所知,canDeactivate 路由 gaurd 无法访问在路由上创建的组件。
编辑 3
NavigationStart 文档声明这是一个被触发的事件。我可以挂钩该事件,但我无法停止实际导航。除非我错了NavigatonStart 只是告诉我它何时开始导航而不是如何停止导航。
【问题讨论】:
-
这是在组件的外部完成的。您正在寻找路线守卫。
-
用
NavigationStart的Router事件怎么样? -
另外我认为你的意思是写组件而不是控制器。
-
另请参阅angular.io/guide/router#canactivate-requiring-authentication 作为如何执行此操作的示例。
-
“我不希望通过 Route Guard 完成此操作”。为什么?这基本上就是
CanDeactivate守卫存在的目的。您绝对可以轻松地将它用于您的用例。
标签: angular typescript