AngularFire2 5.0如何读取嵌套数据

时间:2017-12-16 22:54:55

标签: angularfire2

我有像这样的firebase数据库。我正在使用angularfire2 5.0来查询数据库。

groups{
     -L01ocnd1jxL8wOkLqRK{
         groupCode: "2eotrg"
         groupDescription: "Test"
         groupName: "Test"
         members{
          YuKVbvuGTNgw6OmVr4N89XZG88H3{
            mail: "victor@gmail.com"
            name: "Victor"
            subscription{
                -L01ocnkVVLXPNqCyfLi{   
                    rolegroup: 3    
                    state: true;
                }
            }
          }
        }
        rules{
         firsRule: 0
         secondRule: 0
        }
    }
}

我正在尝试渲染规则和该组的成员,但我不能这样做。

我将该组作为列表阅读

this.items = this.afDB.list('/groups/'+groupKey).snapshotChanges().map(changes => {
  return changes.map(c => ({ key: c.payload.key, ...c.payload.val() }));
});

在我看来,我试图列出成员和规则,但我不能这样做。

        <ion-item *ngFor="let item of items | async">
                {{item | json}}
        </ion-item>

您的帮助请解释我该怎么做。

在angularfirebase的先前版本中,我使用了类似的东西。

    <ion-list inset>
        <ion-item *ngFor="let item of items | async">
            <div *ngFor="let member of item.mebers">
                {{member | json}}
            </div>
        </ion-item>
      </ion-list>

感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

解。

snapshotChanges返回一个SnapshotAction数组。

interface SnapshotAction {
     type: string;
     payload: DatabaseSnapshot;
     key: string;
     prevKey: string | undefined;
}

解决方案是读取返回标准DabaseSnapshot的SnapshotAction.payload,然后使用firebase为此接口提供的功能。 (https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot

这是代码......

this.groupRef.snapshotChanges().subscribe(snapshot => {
  snapshot.forEach(snap => {
    console.log(snap.key);

    if(snap.key == 'groupCode'){
      var datasnapshot = snap.payload;
      datasnapshot.val();
      console.log(datasnapshot.val());

    }
    if(snap.key == 'members'){
      var datasnapshot = snap.payload;
      console.log("Snapchot"+JSON.stringify(datasnapshot));
      datasnapshot.forEach(function(childSnapshot) {
        var key = childSnapshot.key;
        var childData = childSnapshot.val();
        console.log(key);
        console.log(childData.mail);
        console.log(childData.subscription);

        var subscriptionsnap = childSnapshot.child("subscription"); 
        console.log(subscriptionsnap);
        subscriptionsnap.forEach(function(subsc){
          console.log(subsc.key);
          var subsdata = subsc.val();
          console.log(subsdata.rolegroup);
        });

    });

    }        

  }
  );

});