アプリケーションが起動する前にデータをロードしようとしています。私がそれを行う必要がある理由は、メニューのいくつかが、例えばユーザの場所に基づいて、いくつかのユーザ条件に基づいてアクセスを制限しているためです。角度4アプリケーションを初期化する前にデータをロード
ユーザーがまだ場所を持っていない場合、または場所に特定のビューにアクセスできない場合は、そのユーザーをブロックする必要があります。
が、私は成功せず、角度Resolveメソッドを使用しようとした、これは私がやったことです:
解決ガード
// 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
ページにナビゲートすると、ユーザーデータと場所が既に使用可能であるため、検証がうまく動作するなど、別のページを最初に読み込んだときにアクセスできなくなる可能性があります。 LocationGuard
ユーザーの場所を検証しようとすると、そのデータはまだ使用できないため、最初のアクセスがページcompany
にある場合は、すべてのユーザーがそこをナビゲートすることがブロックされます。
また、Resolve
をCanActivate
に置き換えようとしましたが、データが使用可能になった後も空白ページに表示されることはありません。
これは、https:// stackoverflowを参照してください。com/a/45204693/415078 AppModuleをブートストラップする前に基本的にAPIを呼び出すことができます。そして、あなたの警備員にそのデータを渡す/アクセスすることができます – Kuncevic
@Kuncevicは角度ルータを使って解決できませんか?それは店舗などにリンクされているからです。 – celsomtrindade
あなたは店頭などに依存してアプリケーションを初期化する前にそれを行うことはできないように聞こえます – Kuncevic