Angular2提供了2種組件,Guard
和Resolve
。Guard
用來保護一個路徑??梢杂脕砼袛嘤脩糁挥性跐M足一定條件情況下才能打開這個路徑對應(yīng)的頁面。Resolve
用來在進入某個路徑之前先獲取數(shù)據(jù)。
Guard
Guard
其實是一系列接口,只要你實現(xiàn)了他的方法,配置了這些Guard,框架就會根據(jù)這個方法返回的true和false來判斷是否激活這個路由。它包括幾種類型:
- CanActivate:這種類型的
Guard
用來控制是否允許進入當前的路徑。 - CanActivateChild:這種類型的
Guard
用來控制是否允許進入當前的路徑的所有子路徑。 - CanDeactivate:用來控制是否能離開當前路徑進入其他路徑。
- CanLoad:用于控制一個異步加載的子模塊是否允許被加載。
Resolve
這跟Angular1中ui-router
庫的resolve
類似,就是用來在打開一個頁面之前先獲取數(shù)據(jù),而不是進入頁面以后再加載。這個接口中的方法,可以返回任意的對象,也可以返回一個Promise
,或者Observable
。
如果在一個路徑上同時設(shè)置了CanActivate
和Resolve
,首先CanActivate
接口的方法會被執(zhí)行,當這個路由可以被激活時,Resolve接口的方法才會被執(zhí)行。