在继承的组件之间切换可观察数据时出现问题
Trouble switching observable data between inherited components
我有基本组件和两个继承组件。每个组件都从自己的服务中获取数据,并将其投影到状态。如果我尝试使用以下方法 - 数据未正确切换:
get codeData$(): Observable<Codes.Code[]> {
return this.store.select(Codes.Type.Fix ? FixCodesState.getCodes : FreeCodesState.getCodes);
}
[value]="сodeData$ | async"
但是这个丑陋的解决方案有效:
@Select(FixCodesState.getCodes)
fixCodeData$: Observable<Codes.Code[]>
@Select(FreeCodesState.getCodes)
freeCodeData$: Observable<Codes.Code[]>
[value]="(isFixCode ? fixCodeData$ : freeCodeData$) | async"
为什么?
我也试过用这个:
getCodes: typeof GetFreeCodes | typeof GetFixCodes;
this.getCodes = this.codeType === Codes.Type.Fix ? GetFixCodes : GetFreeCodes;
this.store.dispatch(new this.getCodes(this.codePageQuery))
而不是这个:
this.store
.dispatch(
this.codeType === Codes.Type.Fix
? new GetFixCodes(this.codePageQuery)
: new GetFreeCodes(this.codePageQuery)
)
并且不确定它是否也能正常工作(但第一期是 100% 正确的)
第一期可以尝试使用RxJS iif
功能
get codeData$(): Observable<Codes.Code[]> {
return iif(
() => Codes.Type.Fix,
this.store.select(FixCodesState.getCodes),
this.store.select(FreeCodesState.getCodes)
);
}
[value]="сodeData$ | async"
我有基本组件和两个继承组件。每个组件都从自己的服务中获取数据,并将其投影到状态。如果我尝试使用以下方法 - 数据未正确切换:
get codeData$(): Observable<Codes.Code[]> {
return this.store.select(Codes.Type.Fix ? FixCodesState.getCodes : FreeCodesState.getCodes);
}
[value]="сodeData$ | async"
但是这个丑陋的解决方案有效:
@Select(FixCodesState.getCodes)
fixCodeData$: Observable<Codes.Code[]>
@Select(FreeCodesState.getCodes)
freeCodeData$: Observable<Codes.Code[]>
[value]="(isFixCode ? fixCodeData$ : freeCodeData$) | async"
为什么?
我也试过用这个:
getCodes: typeof GetFreeCodes | typeof GetFixCodes;
this.getCodes = this.codeType === Codes.Type.Fix ? GetFixCodes : GetFreeCodes;
this.store.dispatch(new this.getCodes(this.codePageQuery))
而不是这个:
this.store
.dispatch(
this.codeType === Codes.Type.Fix
? new GetFixCodes(this.codePageQuery)
: new GetFreeCodes(this.codePageQuery)
)
并且不确定它是否也能正常工作(但第一期是 100% 正确的)
第一期可以尝试使用RxJS iif
功能
get codeData$(): Observable<Codes.Code[]> {
return iif(
() => Codes.Type.Fix,
this.store.select(FixCodesState.getCodes),
this.store.select(FreeCodesState.getCodes)
);
}
[value]="сodeData$ | async"