2016-10-13 3 views
1

Ich habe ein Problem, das ich nicht verstehe, und wenn jemand helfen kann, würde ich es begrüßen.Artikel in Schleife ist undefined

Ich verwende Ionic2 mit Meteor/MongoDb.

Ich habe einen Cursor:

private messages: Mongo.Cursor<Message>; 

Auf dem Server kann ich einen Einsatz:

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

Es löst eine beobachtbare wie erwartet:

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

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

Auch ich tun ein forEach über die messages, und sie sind alle wie erwartet gefüllt.

Ausgabe

ist mein Problem in der html. Ich Schleife durch den Cursor messages. Es zeigt jedes Element wie erwartet an. Bis ich ein message (wie oben) hinzufügen. Dann ist das neue message von 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> 

Das endgültige message Element in der Schleife (die neuen hinzugefügt), ist undefined. In der *ngIf="!exists(message)"-Funktion, die von der html aufgerufen wird, drucke ich die message und ihre undefined.

So in der html ich Schleife über die messages Cursor, und die neue ist undefined. Wenn jedoch sogar in der gleichen Funktion (exists()), ich Schleife über die messages Cursor wieder, nur um es zu testen, ist keiner der Artikel undefined.

Frage

Bitte kann jemand empfehlen, was ich tun kann, um nicht die letzten item im Cursor als undefined?

Dank

UPDATE

ich etwas bekomme ich nicht verstehen.

Wenn ich eine Funktion aus der html wie folgt aufrufen, ist message nicht undefined:

{{ formatMessage(message) }}

Aber wenn ich eine Funktion wie folgt aufrufen, ist es undefined:

*ngIf="!exists(message)"

Antwort

0

Ich löste das mit:

changeDetection: ChangeDetectionStrategy.OnPush, 

Aber ich denke immer noch, dass es einen Fehler in Angular

geben kann