我是一個初學者與ngrx /店,這是我第一個使用它的項目。如何附加ngrx /存儲角度路由器後衛
我已經成功地建立了我的角項目,NGRX /存儲和我能夠初始化我的主要成分這樣的後派遣荷載作用:
ngOnInit() { this.store.dispatch({type: LOAD_STATISTICS}); }
我已經設置了一個效果當這個動作被分派加載數據:
@Effect()
loadStatistik = this.actions.ofType(LOAD_STATISTICS).switchMap(() => {
return this.myService.loadStatistics().map(response => {
return {type: NEW_STATISTICS, payload: response};
});
});
我的減速器是這樣的:
reduce(oldstate: Statistics = initialStatistics, action: Action): Statistik {
switch (action.type) {
case LOAD_STATISTICS:
return oldstate;
case NEW_STATISTICS:
const newstate = new Statistics(action.payload);
return newstate;
....
雖然這個方法有效,但我無法理解如何在路由器防護中使用它,因爲我目前只需要分派一次LOAD_ACTION。
此外,組件必須分派LOAD操作,加載初始數據聽起來並不合適。我期望商店本身知道它需要加載數據,我不必先發送一個動作。如果是這種情況,我可以刪除組件中的ngOnInit()方法。
我已經看了一下ngrx-example-app,但是我還沒有真正理解它是如何工作的。
編輯:
增加一個後衛的決心,返回NGRX店觀察到的路由沒有得到激活後。這裏是決心:
@Injectable()
export class StatisticsResolver implements Resolve<Statistik> {
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Statistik> {
// return Observable.of(new Statistik());
return this.store.select("statistik").map(statistik => {
console.log("stats", statistik);
return statistik;
});
}
這是路線:
const routes: Routes = [
{path: '', component: TelefonanlageComponent, resolve: {statistik: TelefonieStatistikResolver}},
];
如果統計數據爲空,它會一直等下去麼? –
這是一個簡化版的真實代碼,因爲簡單。錯誤響應在這裏丟失 –