2016-08-21 67 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