Итак, я обнаружил странную ошибку. Я пытаюсь извлечь данные из firebase и отобразить их на странице в моем приложении Ionic 3, но данные отображаются, если я не щелкну какой-либо другой элемент на странице.
Вот код для получения сообщений:
constructor(
public navCtrl: NavController, public afDb: AngularFireDatabase,
public auth: AngularFireAuth
) {
if (this.auth.authState){
this.auth.authState.subscribe(user => {
this.user = user;
this.postsRef = firebase.database().ref('users/app/' + this.user.uid + '/posts');
this.postsRef.on('value', (snap) => {
//snapshotToArray() turns firebase snapshot of objects into an array of objects and returns it
this.posts = this.snapshotToArray(snap);
console.log(this.posts)
})
})
}
snapshotToArray(snapshot){
let returnArr = [ ];
snapshot.forEach(childSnapshot => {
let item = childSnapshot.val();
item.key = childSnapshot.key;
returnArr.push(item);
});
return returnArr;
}
Вот код для просмотра:
<ion-row>
<ion-col text-center>
<ion-card *ngFor="let post of posts; let i = index;" style="width:50%; height:25%;">
<ion-item>
Post: {{post.title}}
</ion-item>
</ion-card>
</ion-col>
</ion-row>
Данные для this.posts
отображаются при входе в консоль. Тем не менее, пока я не щелкну элемент на странице, например, открою меню или коснусь кнопки, posts
не будет отображаться на странице.
Однако, когда я использую this.postsRef.once()
, posts
отображаются на странице в том виде, в каком они должны быть. Это какая-то известная огненная база / ионная проблема?
Как я уже говорил ранее, this.posts
захватывает снимок в массиве, поэтому он должен обновляться на странице.