我想在我的應用程序啓動之前加載一些數據。我之所以需要這樣做,是因爲某些菜單基於某些用戶條件限制了訪問,例如基於用戶位置。在初始化應用程序之前角度4加載數據
因此,如果用戶還沒有位置或它的位置未啓用訪問某個視圖,我需要阻止它。
我試着用角度解決方法,都沒有成功,這是我做的:
解決後衛
// The apiService is my own service to make http calls to the server.
@Injectable()
export class AppResolveGuard implements Resolve<any> {
constructor(
private _api: ApiService,
private _store: Store<IStoreInterface>,
) { }
resolve(): any {
return this._api.apiGet('loadData').subscribe(response => {
this._store.dispatch({
type: USER_FETCH_DATA,
payload: response.usuario
});
return response;
});
}
}
路由
export const routing = [
{
path: '', component: AppComponent, canActivateChild: [AuthGuard], resolve: {app: AppResolveGuard},
children: [
{ path: 'home', component: HomeComponent },
{ path: 'company', canActivate: [LocationGuard], component: CompanyComponent },
]
}
];
AuthGuard正在檢查一個有效的cookie會話。
正如您所看到的,我試圖阻止訪問的路由是company
路由。 當我第一次加載另一個頁面時,我可以阻止訪問,例如,如果第一次訪問是頁面home
,然後導航到頁面company
,驗證工作正常,因爲用戶數據和位置已經可用。
但是,如果第一次訪問頁面company
,它將阻止所有用戶在那裏導航,因爲在LocationGuard
嘗試驗證用戶位置時,數據還不可用。
我也嘗試用CanActivate
替換Resolve
,但它在數據可用後從不啓用視圖,它保留在空白頁上。
嘗試查找此https:// stackoverflow。com/a/45204693/415078基本上你可以在啓動AppModule之前調用你的API,然後你可以在你的守衛中傳遞/訪問這些數據 – Kuncevic
@Kuncevic不能用角度路由器解決它?因爲它都與商店等鏈接。 – celsomtrindade
然後聽起來像你不能做應用程序初始化之前,因爲你依靠商店,等 – Kuncevic