2016-08-21 24 views
4

当用户在浏览器中点击后退或前进按钮时,我想取消路由更改。 到目前为止,我设法捕捉到路由变化事件,如下面的代码:如何取消Angular 2中的路由更改?

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

我无法找到事件的任何方法/成员停止违约事件。然后我会在控制台上得到这个错误,因为我没有按照预期注册路由配置,这是因为我使用location.go()来修改url。

Error: Uncaught (in promise): Error: Cannot match any routes: 'Some/Url'

有什么办法取消路线变化,从而角不看路的配置?

+0

在这里你能解决这个问题? –

回答

8

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

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

签名就像下面,

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

你可以阅读更多关于它here

相关问题