Ionic 2没有更新UI

时间:2017-06-18 10:32:07

标签: javascript angular typescript ionic2

当我更改变量时Ionic 2没有更新我的UI时遇到问题。

HTML:

<ion-card *ngFor="let event of mEvents (click)="onEventCardClick(event)">
    <ion-card-content ion-item>
        <span class="eventTitle">{{ event.title }}</span> <br/>
        <span class="relativeDate">{{ event.getRelativeTimeString() }}</span>
        <ion-badge item-end>{{ event.reservationsCount }}</ion-badge>
        <ion-badge *ngIf="event.hasUnreadMessages" color="danger" item-end>{{ event.unreadMessagesCount }}</ion-badge>
    </ion-card-content>
</ion-card>

从ts文件结束:

this.fcm.onNotification().subscribe((notification:NotificationData) => {
    if(!this.navCtrl.isActive(this.viewCtrl))
        return;

    notification.event = JSON.parse(notification.event);
    notification.reservation = JSON.parse(notification.reservation);
    notification.reservation_message = JSON.parse(notification.reservation_message);

    let eventId: number = notification.event.id;
    for(let i=0; i<this.mEvents.length; i++) {
        if(this.mEvents[i].id == eventId) {
            this.mEvents[i].unreadMessagesCount++;
            this.mEvents[i].hasUnreadMessages = true;
            return;
        }
    }
});

问题是,我从我的服务器发送推送通知。我成功收到消息并更新相应的对象(事件)。但ion-badge中的最后一个ion-card元素未显示。它仍然是“隐藏的”。但是,如果我与UI交互,它会突然显示出来。

如何实现即时UI更新?我读了一些关于NgZone的文章,但有一半说不应该使用,另一半说我应该用它......

1 个答案:

答案 0 :(得分:4)

使用ChangeDetectorRef。它检测变量的变化并更新UI。在构造函数中创建private ref:ChangeDetectorRef,然后在需要更改变量时更新UI时调用this.ref.detectChanges()