0

我正在使用 @ngrx\data 构建一个应用程序,并使用路由解析器将数据预加载到商店中。我通过点击加载的 $ observable 并调用 getAll() 来做到这一点,如下所示:

 resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
        
        return this.dealService.loaded$.pipe(
            tap(loaded => {
                if (!loaded) {
                    this.dealService.getAll()
                }
            }),
            filter(loaded => !!loaded),
            first()
        )

    }

当我只为一个实体加载数据时,这非常有效。但是,一旦我引入第二个实体数据服务并为同一个组件加载数据(无论是在同一个解析器中还是在单独的解析器函数中),当最后一个 getAll() 可观察对象完成时,存储中的数据就会被覆盖,删除另一个实体。

所以我的状态看起来像:

[Deal] @ngrx/data/query-all:
entityCache: {
    Deal: {
      ids: [],
      entities: {},
      entityName: 'Deal',
      filter: '',
      loaded: false,
      loading: true,
      changeState: {}
    }
  }

[DealLine] @ngrx/data/query-all
entityCache: {
    Deal: {
      ids: [],
      entities: {},
      entityName: 'Deal',
      filter: '',
      loaded: false,
      loading: true,
      changeState: {}
    },
    DealLine: {
      ids: [],
      entities: {},
      entityName: 'DealLine',
      filter: '',
      loaded: false,
      loading: true,
      changeState: {}
    }
  }

[DealLine] @ngrx/data/query-all/success
entityCache: {
    Deal: {
      ids: [],
      entities: {},
      entityName: 'Deal',
      filter: '',
      loaded: false,
      loading: true,
      changeState: {}
    },
    DealLine: {
      ids: [...],
      entities: {...},
    }
  }

[Deal] @ngrx/data/query-all/success
entityCache: {
    Deal: {
      ids: [...],
      entities: {...},
    }
  }

所以我的“最终”状态只包含交易实体。为什么?我错过了什么。希望这足以继续,但如果需要,我很乐意发布更多我的代码。

先感谢您!

4

0 回答 0