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的发射。请求返回数据,通话结束。有人有主意吗?
答
ngOnChanges仅触发如果@Input
变化reference
,例如输入类型string
,boolean
,number
,不可变的对象。
承担[selectedConversation]
绑定到一个数组arrSelected
,如果你这样做arrSelected.push
,数组不会改变ref
所以ngOnChanges不会闪光。
所以你不用使用不变的阵列,使用concat
,slice
等改变数组引用
答
请改变你的组件为:
@Component({
selector: 'conversation-detail',
templateUrl: './conversation-detail.component.html',
changeDetection: ChangeDetectionStrategy.Default
})
这工作对我很好。
您是否检查控制台以查看是否没有阻止代码进一步执行的js错误? – Meir
控制台中没有错误。 – HarvP