循环中的项目未定义

时间:2016-10-13 16:15:28

标签: html mongodb meteor ionic2

我有一个我不明白的问题,如果有人可以提供帮助,我将不胜感激。

我正在使用Ionic2和Meteor / MongoDb。

我有一个光标:

private messages: Mongo.Cursor<Message>;

在服务器上我插入:

Messages.insert({
  chatId: chatId,
  senderId: senderId,
  content: content,
  readByReceiver: false,
  createdAt: new Date()
});

它按预期触发了一个可观察的:

    this.messages.observe({
      added: (message) => this.addMessageToLocal(message)
    });

  private addMessageToLocal(newMessage: Message): void {
     // here I print the message, and it is as expected
  }

另外,我通过forEach执行了messages,并且按预期填充了所有内容。

问题

我的问题出在html。我循环通过messages光标。它按预期显示每个项目。直到我添加message(如上所述)。然后,message中的新htmlundefined

<template ngFor let-message [ngForOf]="messages">
        <div *ngIf="!exists(message)" class="message-wrapper">
            <div *ngIf="message.changeDate">
                <center><span class="message-datetime">{{message.createdAt | amDateFormat: 'DD MMM YYYY'}}</span></center>
            </div>
            <div [class]="'message message-' + message.ownership">
                <div class="message-content">server:{{message.content}}</div>
                <span class="time-tick">
<span *ngIf="message" class="message-timestamp">{{message.createdAt | amDateFormat: 'h:mm a'}}</span>
                <div *ngIf="message && message.readByReceiver && senderId == message.senderId">
                    <span class="checkmark">
        <div class="checkmark_stem"></div>
        <div class="checkmark_kick"></div>
    </span>
                </div>
                </span>
            </div>
        </div>
</template>

循环中的最后message项(添加了新项)是undefined。即在*ngIf="!exists(message)"调用的html函数中,我打印message及其undefined

所以在html我循环messages光标,新的光标是undefined。但是,如果即使在相同的函数(exists())中,我再次遍历messages Cursor,只是为了测试它,所有项都不是undefined

问题

请有人建议我可以做什么item中的Cursor undefined作为html

由于

更新

我得到了一些我不理解的东西。

当我从message调用函数时,undefined不是{{ formatMessage(message) }}

undefined

但如果我按如下方式调用函数,则为*ngIf="!exists(message)"

ActiveSheet.PivotItems(1).Visible = True

1 个答案:

答案 0 :(得分:0)

我通过使用:

解决了这个问题
changeDetection: ChangeDetectionStrategy.OnPush,

但我仍然认为Angular可能存在错误