在Firebase订阅功能中,Ionic 3 ion-checkbox checked属性不可查询

时间:2017-07-29 23:57:13

标签: javascript firebase ionic-framework firebase-realtime-database angularfire2

我花了一段时间试图在没有任何运气的情况下在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早期的一段时间内的教程。

感谢任何人提供的任何见解。由于这是我的第一篇文章,我试图提供尽可能多的信息,但请告诉我是否还有其他任何我可以添加的内容,这有助于解决问题。

1 个答案:

答案 0 :(得分:0)

在Observable上调用subscribe之前,由于此Observable包含一系列朋友,因此您需要先使用您的规则过滤这些朋友。您可以使用map函数转换'friends_profile_data'。它使用过滤后的内容创建一个新的observable。

this.friends_profile_data
    .map(array0 => {
          return array0.filter(friend => friend.checked === true)
       })
    .subscribe(
       ...
    );