【问题标题】:Item in loop is undefined循环中的项目未定义
【发布时间】:2016-10-14 15:30:27
【问题描述】:

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

我将 Ionic2 与 Meteor/MongoDb 一起使用。

我有一个光标:

private messages: Mongo.Cursor<Message>;

在服务器上我做了一个插入:

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

它按预期触发了一个 observable:

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

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

另外,我通过messages 执行forEach,它们都按预期填充。

问题

我的问题出在html。我通过messages 光标循环。它按预期显示每个项目。直到我添加一个message(如上)。那么html中的新message就是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 && 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。即在从html 调用的*ngIf="!exists(message)" 函数中,我打印message,以及它的undefined

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

问题

请任何人建议我可以做些什么来Cursor 中的最后一个item 设置为undefined

谢谢

更新

我得到了一些我不明白的东西。

当我按如下方式从html 调用函数时,message 不是undefined

{{ formatMessage(message) }}

但是如果我如下调用一个函数,那就是undefined:

*ngIf="!exists(message)"

【问题讨论】:

    标签: html mongodb meteor ionic2


    【解决方案1】:

    我通过以下方式解决了这个问题:

    changeDetection: ChangeDetectionStrategy.OnPush,
    

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

    【讨论】:

      猜你喜欢
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 2013-04-21
      • 1970-01-01
      • 2018-07-08
      • 2022-01-19
      • 1970-01-01
      相关资源
      最近更新 更多