【问题标题】:Angular Async Pipe not updating properlyAngular Async Pipe 未正确更新
【发布时间】:2021-05-25 18:02:03
【问题描述】:

我有一个角异步管道如下:

  <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 - 只会显示一个项目。

我做错了什么?

谢谢!

【问题讨论】:

    标签: angular firebase ionic-framework


    【解决方案1】:

    试试observableProjects = [...observableProjects, observerProject],而不是observableProjects.push(observerProject)。我在想,因为push 不可变地更改数组并且不会导致更改检测生效。

    【讨论】:

    • 谢谢,但是由于某种原因,这导致根本没有项目出现。
    猜你喜欢
    • 2021-05-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 2021-10-26
    相关资源
    最近更新 更多