当用户在浏览器中单击后退或前进按钮时,我想取消路由更改。 到目前为止,我设法捕获路线更改事件,如下面的代码所示:
constructor(router:Router) {
router.events
.subscribe((event:Event) => {
// some logic.
// event.preventDefault(); ?
});
}
我无法在事件中找到任何方法/成员来停止事件默认值。然后我将在控制台上收到此错误,因为我没有按预期注册路由配置,这是因为我使用location.go()
来修改网址。
错误:未捕获(在承诺中):错误:无法匹配任何路线:'某些/网址'
有没有办法取消路线更改,以便Angular不查看路线配置?
答案 0 :(得分:10)
您可以在定义路线时使用canDeactivate guard,这将有助于您在更改路线时编写逻辑。
您可以简单地返回true或false,根据您是要继续还是拒绝路由导航,您还可以引用对该路由有效的组件实例,以便读取该路由上的任何属性。
方法的签名如下,
canDeactivate(component: T,
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot) :
Observable<boolean>|Promise<boolean>|boolean
您可以阅读更多相关信息here