从 Angular2 中的 ngrx/store 中拉取具有匹配属性的对象

pull objects with a matching attribute from ngrx/store in Angular2

如果我的商店由 preferences 组成,样本如下:

preferences: [{ name: 'pref1', accepted: true, contents: { type: 'boolean', value: true }, { name: 'pref2', accepted: false, contents: { type: 'boolean', value: true }, ... ]

并使用 ngrx 商店和 reducer 我想要两个不同的值。我想要的第一个是我可以使用的所有首选项:

this.preferences = this._store.select('preferences');

我还想只获取 accepted: true 的首选项,并将结果保留为 Observable,这样我就可以使用 Angular 2 模块将其传输到 Angular 2 模块中=18=]管道。我试过类似的东西:

this.acceptedPreferences = this._store.select('preferences').filter(preference => preference.accepted === true);

但是我找不到正确的语法,也找不到一个很好的例子来说明我正在寻找什么来让它发挥作用。我的实际应用程序更复杂,我需要跟踪存储对象的一些属性以创建多个数据子集以通过我的应用程序。我可能应该使用单独的 reducer 来存储它们,但是由于它们都引用相同的数据集,因此使用 Observables 处理子集并过滤掉结果似乎是合适的。

您的首选项不会被展平,select 发出的值将是一个首选项数组,更改时会发出一个新数组。

您可以使用 RxJS map 运算符和 Array.prototype.filter 方法来过滤您的首选项数组:

this.acceptedPreferences = this._store
    .select('preferences')
    .map((preferences) => preferences.filter((preference) => preference.accepted));

每当商店中的偏好发生变化时,生成的 acceptedPreferences observable 将发出一组接受的偏好。