首页 > 解决方案 > AngularFire 2“child_added”返回所有孩子

问题描述

我很难理解"child_added"来自 angularfire2 的内容。

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

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

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

我的数据库结构

在此处输入图像描述

.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/')
 }

先感谢您

标签: firebaseangular6angularfire2

解决方案


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

如果您只想在第一次触发所有用户并在之后获得更改,您可能应该只创建一次列表并从那里返回它:

var usersList;

constructor(private firebaseApp: AngularFireDatabase) {}

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

推荐阅读