2016-10-13 4 views
1

나는 이해할 수없는 문제가 있으며, 누구든지 도울 수 있으면 감사 할 것입니다.루프의 항목이 정의되지 않았습니다.

저는 Meteor/MongoDb와 함께 Ionic2를 사용하고 있습니다. 또한

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

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

, 내가 A : 그것은 관찰 예상대로 트리거

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

: 내가 삽입을 서버에서

private messages: Mongo.Cursor<Message>; 

:

나는 커서가 forEach에서 messages까지이며 모두 예상대로 채워집니다.

문제

내 문제는 html입니다. 여물통 messages 커서를 반복합니다. 예상대로 각 항목을 표시합니다. 내가 message (위와 같음)을 붙일 때까지. 그런 다음 html의 새로운 messageundefined입니다.

<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이 아닙니다.

질문

사람이 내가 하지undefinedCursor의 마지막 item을 위해 무엇을 할 수 있는지 제안 할 수 있습니다하세요?

감사

UPDATE

내가 이해할 수없는 무언가를 얻고있다.

{{ formatMessage(message) }}

그러나 나는 다음과 같이 함수를 호출하는 경우, 그것은 undefined입니다 :

다음과 같이 내가 html에서 함수를 호출 messageundefined하지

*ngIf="!exists(message)"

답변

0

나는 이것을 사용하여 이것을 해결했다 :

changeDetection: ChangeDetectionStrategy.OnPush, 

하지만 여전히 버그가 있다고 생각합니다.

관련 문제