2017-01-03 2 views
1

У меня есть следующие структуры данных в моей базе данных firebase:Возврат автогенерируемой идентификаторы, когда child_added слушатель называется

enter image description here

Я добавил child_added метод, который возвращает все записи из firebase, когда приложение и затем отображает их на таблице HTML.

Проблема у меня есть, она не возвращает автоматически сгенерированный идентификатор для каждой ошибки.

Это мой метод:

getAddedBugs(): Observable<any> { 
    return Observable.create(obs => { 
     this.bugsDbRef.on('child_added', bug => { 
      const newBug = bug.val() as Bug; 
      obs.next(newBug); 
     }, 
      err => { 
       obs.throw(err) 
      }); 
    }); 
} 

classBug выглядит следующим образом:

export class Bug { 
constructor(
    public id: string, 
    public title: string, 
    public description: string, 
    public status: number, 
    public severity: number, 
    public createdBy: string, 
    public createdDate: number, 
    public updatedBy?: string, 
    public updatedDate?: number 
) {} 
} 

Итак, вопрос, как я могу получить мой метод также включать автогенерируемые идентификаторы, а Мне нужен этот идентификатор для обновления/удаления и т. Д.

Я искал это, и, к сожалению, я ничего не смог найти на этом.

Может ли кто-то пролить свет на то, как я это делаю?

ответ

2

Вместо литье значения снимка мероприятия на более Bug (это не Bug, это просто Object), вы должны создать Bug экземпляр, используя информацию из снимка. Снимок содержит ключ (автогенерируемая ID) и значение:

getAddedBugs(): Observable<any> { 
    return Observable.create(obs => { 
    this.bugsDbRef.on('child_added', 
     snapshot => { 
     // The snapshot's value will be an Object, not a Bug instance. 
     const val = snapshot.val(); 
     const bug = new Bug(
      snapshot.key, // The auto generated ID. 
      val.title, 
      val.description, 
      ... etc. 
     ); 
     obs.next(bug); 
     }, 
     err => { 
     obs.throw(err) 
     }); 
    }); 
} 

Вы должны также рассмотреть вопрос о возвращении функцию, которая удаляет слушателя событий на отписку:

getAddedBugs(): Observable<any> { 
    return Observable.create(obs => { 
    const listener = snapshot => { 
     const val = snapshot.val(); 
     const bug = new Bug(
     snapshot.key, 
     val.title, 
     val.description, 
     ... etc. 
    ); 
     obs.next(bug); 
    } 
    this.bugsDbRef.on('child_added', listener, err => { obs.throw(err) }); 
    return() => this.bugsDbRef.off('child_added', listener); 
    }); 
} 
Смежные вопросы