【问题标题】:Using selectors with ngrx data使用带有 ngrx 数据的选择器
【发布时间】:2019-09-21 08:23:52
【问题描述】:

我们如何使用 ngrx 数据的选择器的记忆能力?

如何从存储中的ngrx数据“entityCache”状态创建选择器?

谢谢

【问题讨论】:

    标签: ngrx angular-ngrx-data


    【解决方案1】:

    你能澄清一下你在寻找什么样的选择器吗? EntityCollectionService 有一堆预设选择器,尽管文档并不广泛。这是source code 的“内置”选择器列表。

      /** Observable of the collection as a whole */
      readonly collection$: Observable<EntityCollection> | Store<EntityCollection>;
    
      /** Observable of count of entities in the cached collection. */
      readonly count$: Observable<number> | Store<number>;
    
      /** Observable of all entities in the cached collection. */
      readonly entities$: Observable<T[]> | Store<T[]>;
    
      /** Observable of actions related to this entity type. */
      readonly entityActions$: Observable<EntityAction>;
    
      /** Observable of the map of entity keys to entities */
      readonly entityMap$: Observable<Dictionary<T>> | Store<Dictionary<T>>;
    
      /** Observable of error actions related to this entity type. */
      readonly errors$: Observable<EntityAction>;
    
      /** Observable of the filter pattern applied by the entity collection's filter function */
      readonly filter$: Observable<string> | Store<string>;
    
      /** Observable of entities in the cached collection that pass the filter function */
      readonly filteredEntities$: Observable<T[]> | Store<T[]>;
    
      /** Observable of the keys of the cached collection, in the collection's native sort order */
      readonly keys$: Observable<string[] | number[]> | Store<string[] | number[]>;
    
      /** Observable true when the collection has been loaded */
      readonly loaded$: Observable<boolean> | Store<boolean>;
    
      /** Observable true when a multi-entity query command is in progress. */
      readonly loading$: Observable<boolean> | Store<boolean>;
    
      /** ChangeState (including original values) of entities with unsaved changes */
      readonly changeState$:
        | Observable<ChangeStateMap<T>>
        | Store<ChangeStateMap<T>>;
    
    

    【讨论】:

    • 我们需要以某种方式使用这个`构造函数(private authDataService: AuthDataService, private authEntityService: AuthEntityService, private authEntitySelectorFactory: AuthEntitySelectorFactory) const collectionSelectors = authEntitySelectorFactory.createCollectionSelector('auth'); collectionSelectors.projector ??
    • 你如何创建一个选择器?如何从这个 EntityCollectionService 创建一个特征选择器?
    • MarkoDebač 目前还不清楚您要选择什么。你能举一个更完整的例子吗? @altu您到底想从entityCollection中选择什么?知道这会很有帮助。可以举个例子吗?
    • 检查我的一个问题,他叫什么名字......蒂姆在那里回答了。我在移动设备上,现在不能做复杂的事情
    【解决方案2】:

    一开始对我来说也有点混乱。选择器在 Facade Pattern 后面使用。

    看看这篇文章https://medium.com/@thomasburlesonIA/ngrx-facades-better-state-management-82a04b9a1e39,它可能会帮助你更好地理解。

    ngrx/data 默认使用该模式(这不是 ngrx,尽管您可以创建自己的外观,如文章中所述)。

    总结

    ----------------- ngrx -----------------

    ----------------- ngrx/数据 -----------------

    您可以在https://ngrx.io/guide/data/architecture-overview找到更多信息

    ... 您的组件还订阅了一个或多个服务的 Observable 选择器,以便反应性地处理和显示这些命令产生的实体状态更改。 ...

    但是,再次从文档中看起来很混乱......

    看看这张照片

    来自https://slides.com/jiali/deck-5#/14,也不错。

    在@bkelley 说的最后一张图中,你可以使用EntityCollectionService,它是ngrx/data中的Facade

    希望有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 2022-04-21
      • 1970-01-01
      相关资源
      最近更新 更多