问题描述
所以我相信我了解发生了什么...每次选择器被触发时,它都会更新从ngRx存储返回的整个状态,因此最初加载数据的FinData现在在FranchiseData加载时变得不确定。如何防止这种情况发生,并简单地正确返回所有数据?我正在进行3个单独的服务调用,并在CombineLatest中返回它们,以确定routeGuard是否可以激活。它们都返回数据,但是问题在于它们不维护数据。其中一个首先在ngOnChanges中返回并显示数据,但随后一个返回,原始的不再具有任何数据。任何帮助表示赞赏!
**parent.html**
<financial-data [finData]="financialData$ | async" [finFactors]="financialFactors$ | async" [franchiseData]="franchiseData$ | async"></financial-data>
**parent.component**
financialData$: Observable<financialData[]>;
financialFactors$: Observable<financialFactors[]>;
franchiseData$: Observable<franchiseData>
ngOnInit() {
this.financialData$ = this.store.select(getFinancialData);
this.financialFactors$ = this.store.select(getFinancialFactors);
this.franchiseData$ = this.store.select(getFranchiseData);
}
**child.component**
@input() finData: FinancialData[];
@input() finFactors: FinancialFactors[];
@input() franchiseData: FranchiseData;
ngOnChanges(changes) {
if(this.finData && this.franchiseData && this.finFactors) { <--- this usually comes back with finFactors as undefined so it never runs this.getFinancials() but it never re-runs
this.getFinancials();
}
}
getFromStoreOrAPI(): Observable<any> {
return combineLatest([
this.store.select(getFinancialFactors),this.store.select(getFinancialData),this.store.select(getFranchiseData)
]).pipe(
map(([financialFactors,financialData,franchiseData]) => ({
financialFactors,franchiseData
}))
);
}
canActivate(route: ActivatedRouteSnapshot): Observable<boolean> | boolean {
let tranId = this.router.getCurrentNavigation().extras.state.tranId;
let modelId = this.outer.getCurrentNavigation().extras.state.modelId;
this.store.dispatch(scorecardActions.loadFinancialData({tranId: tranId}));
this.store.dispatch(scorecardActions.loadFranchiseData({tranId: tranId}));
this.store.dispatch(scorecardActions.loadFinancialFactors({modelId: modelId}));
return this.getFromStoreOrAPI()
.pipe(
mapTo(true),<--- Neither one of these ever gets hit,I believe because it returning an array??
catchError(() => of(false))
);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)