首页 > 解决方案 > ngrx-data, getWithQuery() loaded$ observable 即使加载了数据也不会发出布尔值“true”

问题描述

通过ngrx实现路由器解析器时遇到问题。我希望在将数据加载到 entityCache 时解析路由器。奇怪的行为是我可以清楚地看到数据是通过 Chrome Devtools (Redux) 加载到 entityCache 中的。即使 loading$ 标志(可观察)正常工作,loaded$ 标志首先会按预期发出false ,但在将数据加载到存储时不会发出true 。有变通的解决方案,但我不知道是否有任何内置的解决方案。

.
.
.
@Injectable()
export class BusDetailResolver implements Resolve<boolean>{
    
    constructor(
        ...,
        private busDetailEntityService:BusDetailEntityService,
    ){}

    private accessToken = '';
    ....



    resolve(route:ActivatedRouteSnapshot, state:RouterStateSnapshot):Observable<boolean>{

        return this.busDetailEntityService.loaded$
        .pipe(
            tap(x => console.log(x)),
            tap(loaded => {
                if(!loaded && this.accessToken != ''){
                    let queryParams:QueryParams = 
                    {   
                        routeCode: "exampleRCode",
                        direction: "exampleDirection"
                    };
                    
                    this.busDetailEntityService.getWithQuery(queryParams);
                }
            }),
            filter(loaded => !!loaded),
            first(),
        );

    }
}

当我订阅某个组件(没有实现路由器解析器)时,像这样订阅相同的服务:

this.busDetailEntityService.getWithQuery(packet).subscribe(val => {
  console.log('data loaded:', val)
})

我可以清楚地看到数据已加载。在任何情况下,loaded$ 标志都不会触发为真。

加载前状态

负载差异前

加载状态后

负载差异后

(如您所见 loading$ 有效,loaded$ 无效)

标签: angularngrx

解决方案


推荐阅读