更改检测ngIf导致异常

时间:2017-06-15 13:45:12

标签: angular meteor ionic-framework angular-meteor

我遇到了变更检测问题,我不确定该怎么做才能解决。

    CEChats.find({
        group: {$in: groupIds},
    })
    .map((sub2: any) => {
      sub2.forEach((chat)=> {
          this.findLastChatMessage(chat._id, chat.lastMessage).subscribe(lmsgsub=> {
            chat.lastMessage = lmsgsub;
            chat.unseen = !chat.lastMessage.seenBy.some((x)=>x==this.user._id);
            this.appRef.tick();
          });
      });
      this.groupChats = sub2;
      this.appRef.tick();
    });

我在共享服务组件中执行此调用。 (没有@component或@page)

groupChats用于另一个组件(chatList),该组件使用*ngIf上看不见的键来显示/隐藏图标

<ion-icon name="radio-button-on" *ngIf="chat.unseen"></ion-icon>

当我切换到chatList的子页面(聊天)时,我明白了 "ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'true'. Current value: 'false'."

将changeDetection更改为onPush没有帮助,我无法在服务中使用changeDetectorRef,因为它没有提供可用的提供程序(因为它不是一个组件?)

我也尝试使用ApplicationRef.tick(),这也没有帮助。 我在内部订阅(lastMessage)和groupChats的设置中使用了appilcationRef。没有帮助。

导致值更改的更新在提取邮件集合时在子聊天页面中完成。

应用程序使用用户ID(作为已读回执)更新之前未见过的每条消息,这反过来导致上述订阅更新(findLastMessage()

我正在使用带有角度流星的Ionic。

0 个答案:

没有答案