AngularFire 2 "child_added" возвращает все дочерние элементы - PullRequest
0 голосов
/ 02 декабря 2018

У меня трудности с пониманием "child_added" от angularfire2.

Согласно документации, "child_added" должен вернуть всех детей в первый раз, а затем прослушивать только новых детей, добавленных вэтот конкретный узел БД.

С моим кодом я впервые получаю всех детей, как ожидалось.Проблема в том, что когда я добавляю нового дочернего элемента в узел userinfo, я все равно получаю все дочерние элементы (включая недавно добавленные).

Означает ли это, что "child_added" фактически загружает все дочерние элементы каждыйвремя добавления нового ребенка?

Моя структура базы данных

enter image description here

.ts code (соответствующая часть)

 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 голосов
/ 02 декабря 2018

Поскольку вы возвращаете новый список каждый раз, когда вызывается getUsers, событие child_added будет запускаться для каждого пользователя в этом списке.

Если вы хотите, чтобы все пользователи запускались только в первый рази после этого получите изменения, вам, вероятно, следует создать список только один раз и вернуть его оттуда:

var usersList;

constructor(private firebaseApp: AngularFireDatabase) {}

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