让Oservable获得项目
问题描述:
我使用angular 4工作,并且发现了Observable概念...让Oservable获得项目
我有此对象。
myobjects: Observable<MyObject[]>;
我想找到我的object.name == 'titi'
例如和return MyObject
,而不是Observable
的属性名称的对象......
let toto: MyObject;
toto = this.myobjects.filter((tb: MyObject[], i: number) => {
return tb[i].name=== "titi";
}).
subscribe((tbs: MyObject[]) => {
toto = tbs;
});
这可能吗? 我没有找到.. 我不明白:(
答
当流处理,你应该避免副作用,如果可能的话。而不是将其重新分配给一个类变量,你倒是应该拥抱可观察的模式,这样做:
const selectedPers$ = this.personArray$
.map(arr => arr.find(pers => pers.name === 'titi'))
.filter(pers => !!pers);
,然后在视图中使用异步管这样的:
<p>The selected person is {{ selectedPers$ | async | json }}</p>
如果你想显示,例如,你可能做的名字和人的年龄:
<div *ngIf="selectedPers$ | async as selectedPers">
<p>Person's name is: {{ selectedPers.name }}</p>
<p>Person's age is: {{ selectedPers.age }}</p>
</div>
这样,每次你personArray$
发出一个新的值时,所选择的个人将被更新。
答
所有什么ü需要做的就是在这个Observable
订阅频道,让那么滤镜阵列的阵列来获取ü要然后把它的值。在你的对象值
这里是一个简单的解决方案:
myobjects: Observable<MyObject[]>;
let toto: MyObject;
this.myobjects.subscribe(result =>
let newArray = result.filter(object => object.name === 'titi');
if(newArray.length === 1)
this.toto = newArray[0];
);
希望它可以帮助你:)
您可以在订阅方法中进行过滤 – learner