NgOnChanges不会在HTTP请求后触发

问题描述:

我有一个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

ngOnChanges仅触发如果@Input变化reference,例如输入类型stringbooleannumber,不可变的对象。

承担[selectedConversation]绑定到一个数组arrSelected,如果你这样做arrSelected.push,数组不会改变ref所以ngOnChanges不会闪光。

所以你不用使用不变的阵列,使用concatslice等改变数组引用

请改变你的组件为:

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

这工作对我很好。