AngularFire 2“ child_added”返回所有子项

时间:2018-12-02 09:12:03

标签: firebase angular6 angularfire2

我很难理解angularfire2中的"child_added"

根据文档,"child_added"应该第一次返回所有子节点,然后仅侦听添加到该特定db节点的新子节点。

使用我的代码,我第一次按预期得到所有孩子。问题是,当我向userinfo节点添加新的子代时,我仍然会获得所有的子代(包括新添加的子代)。

这是否意味着"child_added"实际上是在每次添加新孩子时都下载所有孩子?

我的数据库结构

enter image description here

.ts代码(相关部分)

 ngOnInit(){
   this.userService.getUsers().snapshotChanges(['child_added'])
     .subscribe(users => {        
       users.forEach(user=> {
         console.log(user.key)
       })
     })
 }

服务(相关部分)

 constructor(private firebaseApp: AngularFireDatabase) {}

 getUsers(){
   return this.firebaseApp.list('userinfo/')
 }

提前谢谢

1 个答案:

答案 0 :(得分:1)

由于每次调用getUsers时都会返回一个新列表,因此child_added事件将触发该列表中的每个用户。

如果您只想在第一时间触发所有用户,然后进行更改,则应该只创建一次列表,然后从那里返回:

var usersList;

constructor(private firebaseApp: AngularFireDatabase) {}

getUsers(){
  if (!this.usersList) {
    this.usersList = this.firebaseApp.list('userinfo/')
  }
  return this.usersList;
}