Элемент в цикле не определен

#html #mongodb #meteor #ionic2

#HTML #mongodb #метеор #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
  }
  

Кроме того, я выполняю a forEach через messages , и все они заполняются, как и ожидалось.

Проблема

Моя проблема в html . Я перебираю messages курсор. Он отображает каждый элемент, как и ожидалось. Пока я не добавлю message (как указано выше). Тогда новый message из html есть undefined .

 <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 amp;amp; message.readByReceiver amp;amp; 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 I messages наведите курсор, и появится новый undefined . Однако, если даже в той же функции ( exists() ) я снова перебираю messages курсор, просто чтобы проверить его, ни один из элементов undefined не определен.

Вопрос

Пожалуйста, кто-нибудь может подсказать, что я могу сделать, чтобы не иметь последнего item в Cursor as undefined ?

Спасибо

Обновить

Я получаю что-то, чего не понимаю.

Когда я вызываю функцию из html следующего, message не undefined :

{{ formatMessage(message) }}

Но если я вызываю функцию следующим образом, это undefined :

*ngIf="!exists(message)"

Ответ №1:

Я решил это, используя:

 changeDetection: ChangeDetectionStrategy.OnPush,
  

Но я все еще думаю, что в Angular может быть ошибка