我花了一段时间试图在没有任何运气的情况下在Stack Overflow上找到解决方案。
我在html页面中使用Ionic 3 已检查属性作为联系人列表的一部分,因此......
<ion-list>
<ion-item *ngFor="let friend of friends_profile_data | async ;">
<ion-label>
<h2>{{friend.name}}</h2>
</ion-label>
<ion-checkbox [checked]="friend.checked" (click)="toggleItem(friend)" ></ion-checkbox>
</ion-item>
</ion-list>
..并在关联的.ts文件中使用toggleItem函数:
toggleItem(friend): void {
friend.checked = !friend.checked;
}
在我使用虚拟数据库的测试运行中,我能够通过在同一个.ts文件中使用以下内容成功查询每个“朋友”的状态(本地虚拟对象的离子内容行中没有| async) DB)..
this.friends_profile_data.forEach((friend) => {
var i =0;
var total = friend.month.length;
for(;i < total; i++ ) {
if(friend.checked) {
console.log(friend.name);
}
}
});
这会浏览我的联系人列表中的所有朋友,找到我选择的朋友,然后给我他们的名字,而不是那些未被选中的人。一切都好。
随着工作正常,我已经开始将所有内容挂钩到Firebase数据库。一切都进展顺利,除了当我尝试在Firebase订阅功能中进行类似的查询时,它不起作用。这是代码的样子......
this.friends_profile_data.subscribe(friends => {
friends.forEach((friend) => {
if (friend.checked) {
console.log(friend.name);
}
})
});
在这种情况下,friends_profile_data返回的数据集与虚拟本地数据库中的数据类似,但是来自我的Firebase数据库。
它不是仅返回我在列表中选择的朋友,而是记录每个朋友的名字......好像它没有在IF语句中注册 friend.name 。
我尝试过使用替代方案,以防其中任何一种工作,例如:
friend.checked = true
friend.checked == true
friend.checked === true
..但没有任何作用。
这应该有用吗?是否存在一些我不知道通过对Firebase订阅功能中的已检查属性进行查询而引入的问题?
或者,我是否幸运地使用本地虚拟数据库,并且在Firebase订阅功能中实际上有更强大的方法来处理这个问题? 已检查属性方法的使用来自我在Ionic早期的一段时间内的教程。
感谢任何人提供的任何见解。由于这是我的第一篇文章,我试图提供尽可能多的信息,但请告诉我是否还有其他任何我可以添加的内容,这有助于解决问题。
答案 0 :(得分:0)
在Observable上调用subscribe之前,由于此Observable包含一系列朋友,因此您需要先使用您的规则过滤这些朋友。您可以使用map函数转换'friends_profile_data'。它使用过滤后的内容创建一个新的observable。
this.friends_profile_data
.map(array0 => {
return array0.filter(friend => friend.checked === true)
})
.subscribe(
...
);