2017-04-21 108 views
0

我有一個ngonchanges沒有觸發的問題。NgOnChanges不會在HTTP請求後觸發

我有這個組件:

@Component({ 
    selector: 'conversation-detail', 
    templateUrl: './conversation-detail.component.html' 
}) 
export class ConversationDetailComponent implements OnChanges{ 
    @Input() 
    selectedConversation: Conversation; 

    title = 'Conversation Detail';  
    convoMessages: Array<Message> = []; 


    constructor(
      private _messageService: MessageService 
    ){}; 

    ngOnChanges(changes: SimpleChanges){   
     this.getMessages(); 
    } 

    ngOnInit(): void{ 

    } 

    private getMessages(){ 
     if(this.selectedConversation != undefined){ 
      this._messageService.getMessagesForConversation(this.selectedConversation.ConversationId).then(
       data => { 
        if (data) { 
         this.convoMessages = data.serviceResult as Array<Message>; 
        } else { 
         //This really should never happen 
         console.error('Error retrieving users data: Data object is empty'); 
        } 
       }, 
       error => { 
        //loader.dismiss(); 
        console.error('Error retrieving users data'); 
        console.dir(error); 
       } 
      ); 
     } 
    }  

} 

的ngonchanges將觸發第一次selectedConversation變化。 GetMessages被調用並加載消息數據。之後,當selectionConversation更改時,ngonchanges不再觸發。

如果我將函數調用註釋到getMessages,那麼ngonchanges將在每次selectedConversation更改時觸發。

所以,我不確定getMessages中發生了什麼,切斷了ngonchanges的發射。請求返回數據,通話結束。有人有主意嗎?

+0

您是否檢查控制檯以查看是否沒有阻止代碼進一步執行的js錯誤? – Meir

+0

控制檯中沒有錯誤。 – HarvP

回答

0

ngOnChanges僅觸發如果@Input變化reference,例如輸入類型stringbooleannumber,不可變的對象。

承擔[selectedConversation]綁定到一個數組arrSelected,如果你這樣做arrSelected.push,數組不會改變ref所以ngOnChanges不會閃光。

所以你不用使用不變的陣列,使用concatslice等改變數組引用

0

請改變你的組件爲:

@Component({ 
    selector: 'conversation-detail', 
    templateUrl: './conversation-detail.component.html', 
    changeDetection: ChangeDetectionStrategy.Default 
}) 

這工作對我很好。