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

时间:2016-10-08 02:15:59

标签: angular ngrx

如果我有一个由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,以便我可以使用async管道将其传输到Angular 2模块中。我尝试过这样的事情:

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

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

1 个答案:

答案 0 :(得分:1)

您的偏好不会被夷为平地,select发出的值将是一系列偏好,并在更改时发出新数组。

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

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

只要商店中的偏好发生变化,结果acceptedPreferences observable就会发出一系列已接受的偏好。