如何取消Angular 2中的路线更改?

时间:2016-08-21 06:57:43

标签: javascript angular

当用户在浏览器中单击后退或前进按钮时,我想取消路由更改。 到目前为止,我设法捕获路线更改事件,如下面的代码所示:

constructor(router:Router) {
  router.events
    .subscribe((event:Event) => {
      // some logic.
      // event.preventDefault(); ?
    });
}

我无法在事件中找到任何方法/成员来停止事件默认值。然后我将在控制台上收到此错误,因为我没有按预期注册路由配置,这是因为我使用location.go()来修改网址。

  

错误:未捕获(在承诺中):错误:无法匹配任何路线:'某些/网址'

有没有办法取消路线更改,以便Angular不查看路线配置?

1 个答案:

答案 0 :(得分:10)

您可以在定义路线时使用canDeactivate guard,这将有助于您在更改路线时编写逻辑。

您可以简单地返回true或false,根据您是要继续还是拒绝路由导航,您还可以引用对该路由有效的组件实例,以便读取该路由上的任何属性。

方法的签名如下,

canDeactivate(component: T,
    route: ActivatedRouteSnapshot, 
    state: RouterStateSnapshot) :  
     Observable<boolean>|Promise<boolean>|boolean

您可以阅读更多相关信息here