我遇到了ngonchanges没有触发的问题。
我有这个组件:
@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并将其加载到消息数据中。之后,当selectedConversation改变时,ngonchanges不再触发。
如果我注释掉对getMessages的函数调用,那么每次selectedConversation改变时都会触发ngonchanges。
所以,我不确定getMessages中发生了什么事情,这会阻止ngonchanges的启动。请求返回数据,呼叫结束。有人有什么想法吗?
答案 0 :(得分:0)
ngOnChanges仅在@Input
更改reference
时触发,例如输入类型string
,boolean
,number
,不可变对象。
假设[selectedConversation]
绑定到数组arrSelected
,如果您执行arrSelected.push
之类的操作,则数组不会更改ref
,因此ngOnChanges不会被激活。< / p>
因此您需要使用不可变数组,使用concat
,slice
等来更改数组引用
答案 1 :(得分:0)
请将您的组件更改为:
@Component({
selector: 'conversation-detail',
templateUrl: './conversation-detail.component.html',
changeDetection: ChangeDetectionStrategy.Default
})
这对我来说很好。