2016-12-15 178 views
0

我已經寫了CanDeactivate後衛我的角度應用的未來路線在CanDeactivate衛隊這是非常基本的:角2路由器3.0

@Injectable() 
export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> { 
    canDeactivate(component: CanComponentDeactivate): Promise<boolean> | boolean { 
     return component.canDeactivate ? component.canDeactivate() : true; 
    } 
} 

它只是等待一個承諾來解決,以真/假,或立即真/ false將被傳回。但是,我想要做的事情是在放置警衛的組件中檢查未來路線。舉例來說,假設我有三條路線,/list,/shop, /checkout,我把canDeactivate後衛放在/shop上。我想要那裏,因爲如果他們離開那個組件,我想問他們是否確定他們想離開。但如果他們要離開去結賬,我不想問他們是否確定。我只會立即回覆canDeactivate後衛。但是,如果他們回到/list,我可能會問他們是否確定他們想將商品放在購物車中。

我擡頭看了幾個問題,包括this one,並通讀了Angular site上的文檔,但還沒有找到我在找什麼。

我的想法是,在實際的組件中,在canDeactivate方法中,我將能夠檢查路由器或未來路由或沿着這些行的東西,看看它是什麼,看看我是否要立即返回true來自後衛。

對此的任何想法?

+0

您可以添加某些使用router.navigate進行導航的點擊處理程序,並保存可在'canDeactivate'方法中使用的URL,以根據您的需要返回true \ false。 –

回答

0

有一種神奇的,神祕的,可選的CanDeactivate接口參數,會給你什麼你正在尋找...... nextState

interface CanDeactivate<T> { 
    canDeactivate(component: T, currentRoute: ActivatedRouteSnapshot, 
    currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): 
    Observable<boolean>|Promise<boolean>|boolean 
} 

SRC :: https://angular.io/api/router/CanDeactivate