[英]Angular Async Pipe not updating properly
我有一個 angular 異步 pipe 如下:
<ng-container *ngIf="showProjects && (projects | async) as projectList; else loading">
然后在 projects.page.ts 我有以下內容:
refreshProjects = function(event) {
this.projects = new Observable<ProjectList>((observer) => {
let observableProjects: ProjectList = [];
this.userObject.subscribe( async (user) => {
observableProjects = [];
for (let projectID of user.ownedProjects) {
this.firestore.collection('projects').doc(projectID).ref.onSnapshot( async (doc) => {
if (doc.exists) {
let tempProject = doc.data() as Project;
let tempDate = tempProject.startDate as unknown as { nanoseconds: number; seconds: number; };
let tempLocation = tempProject.location as unknown as string;
let observerProject: Project = new Project(
tempProject.fullName,
tempProject.shortName,
tempProject.ownerID,
tempProject.lastOwnerID,
tempDate.seconds,
tempProject.duration,
tempProject.logo,
tempProject.status,
tempProject.categoryID,
tempLocation,
[],
tempProject.timelinePosts);
await this.firestore.collection('projects/' + projectID + '/descriptions').ref.get().then((snapshot) => {
snapshot.forEach((doc) => {
observerProject.description.push(doc.data() as Description);
});
observableProjects.push(observerProject);
});
}
});
}
observer.next(observableProjects);
});
});
if (event != undefined) {
this.showProjects = false;
setTimeout(() => {
this.showProjects = true;
event.target.complete();
}, 500);
}
}
ngOnInit() {
this.refreshProjects(undefined);
}
我的 Firebase 收藏中有兩個項目。 但是,當我第一次加載頁面時,只顯示一個,然后當我使用 and pull 刷新時,兩個項目都會顯示。 如果我將 refreshPorjects 中的內容移動到 ngOnInit - 只顯示一個項目。
我究竟做錯了什么?
謝謝!
而不是observableProjects.push(observerProject)
嘗試observableProjects = [...observableProjects, observerProject]
。 我在想,因為push
不可變地更改數組並且不會導致更改檢測生效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.