Я бы go с другим подходом при сохранении и загрузке данных в и из Firestore. Я работаю над разработкой Ioni c 4 в Angular, и структура приложения похожа на вашу.
Мой подход к сохранению данных и загрузке данных из базы данных Firestore:
In: post.component.ts
- Объявление типа интерфейса что я хочу хранить данные как. Это объявлено справа ниже методов импорта в начале файла:
export interface Post {
pid:string, //This is the post's ID
uid:string, //User's ID that has posted the post
message:string, // This is the post's content
timestamp:number, // This is the post's date and time
} // This is just brief data for the example
Затем вы должны объявить переменную publi c в виде массива типа Post, чтобы вы загружали туда все записи перед предварительным просмотром. Затем в конструкторе загрузите данные и сохраните их в массив:
posts:Post[] = [];
constructor([...]) {
[...]
//Load posts based on criteria:
// USER_ID is a known user id.
this.firestore.collection('posts').ref.where('uid', '==', USER_ID).onSnapshot( (querySnapshot) => {
querySnapshot.forEach((doc) => {
//Found a single snapshot.
//Get the data and push to the array
this.posts.push(
{
pid: doc.data().pid,
uid: doc.data().uid,
message: doc.data().message,
timestamp: doc.data().timestamp,
}
);
});
});
}
// This is just an example on how to query data, you can use your code to just load all the posts.
In: post.component. html
После этого вы можете перечислить данные в файле html, как вы это сделали, но убрать знак
$
:
<div *ngFor="let p of posts">
Post ID: {{p.pid}}
Post message: {{p.message}}
</div>
Данные должны быть предварительно просмотрены следующим образом
Это пример для 2 загруженных сообщений :
Post ID: THE_ID_OF_LOADED_POST_01
Post message: This is the message of post 01
Post ID: THE_ID_OF_LOADED_POST_02
Post message: This is the message of post 02
Опять же, все это работает Например, вы можете изменить данные в соответствии с вашими потребностями. Я надеюсь, что это полезно!