如果我有一个由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
处理子集并过滤掉结果似乎是合适的。
答案 0 :(得分:1)
您的偏好不会被夷为平地,select
发出的值将是一系列偏好,并在更改时发出新数组。
您可以使用RxJS map
运算符和Array.prototype.filter
方法来过滤您的首选项数组:
this.acceptedPreferences = this._store
.select('preferences')
.map((preferences) => preferences.filter((preference) => preference.accepted));
只要商店中的偏好发生变化,结果acceptedPreferences
observable就会发出一系列已接受的偏好。