2017-05-23 25 views
1

我有一些http調用需要在appActivate guard方法觸發之前在app組件中處理。Angular2 cli - 如何在canActivate觸發器之前的引導期間加載外部數據?

路由看起來是這樣的時刻:

{ path: '', redirectTo: '/home', pathMatch: 'full' }, 
{ path: 'home', component: HomeComponent, canActivate: [AccessGuard] }, 

所以我想AccessGuard的canActivate方法的應用程序組件構造完成調用所有的HTTP調用後運行。

但是現在在AppComponent中的http調用完成之前,canActivate觸發器,因此在存儲中找不到任何數據。

+0

Wha如果您將孩子添加到「家」路徑?然後,家庭進行HTTP呼叫,並且可以根據結果顯示「router-outlet」 – trichetriche

+0

@trichetriche:您能舉一個例子來說明您的意思嗎?我家裏沒有任何兒童組件,所以它會如何工作? – Angad

回答

0

我發表了評論,但現在我需要使用一個答案。

所以,如果你使用一個孩子的路線組件:

{ path: 'home', component: HomeComponent, canActivateChild: [AccessGuard], children: [ 
    // Paths to your children 
] }, 

這樣一來,家裏就可以使HTTP調用,而兒童受保護的保護。這是你想要的,對吧?

編輯點評後

試試這個:

{ path: 'home', component: HomeComponent, canActivate: [AccessGuard] } 

當你的唯一途徑,並且:

this.yourHttpService.yourCall().subscribe(data => { 
    this.router.navigateByUrl('/home'); 
}) 

在您的應用程序組件(不要忘了從導入Router@angular/router

+0

HTTP調用是在AppComponent中進行的,而不是在HomeComponent中進行的。當我在瀏覽器中訪問url http:// localhost:4200 /時,按照上面顯示的具有canActivate的路由,我被重定向到主頁。問題是AppComponent Http調用尚未完成,並且canActivate方法首先完成。如何確保AppComponent在canActivate觸發前完全完成 – Angad

+0

對不起,沒有看到您的編輯。你的應用不會通過appComponent,因爲你直接重定向。我會編輯我的答案。 – trichetriche

+0

是的,我確實想重定向它,但希望在調用canActive之前首先完成Http調用。如果我將http調用移動到gaurd本身,那麼意味着每次調用canActivate(對於所有路由),我必須進行http調用。相反,我想在應用程序組件中進行http調用,並將數據存儲在redux存儲中,然後任何組件(包括canActivate)都可以直接查詢存儲而不是轉到服務器(http調用)。我希望這是有道理的。在此先感謝 – Angad

相關問題