NgOnChanges не запускается после HTTP-запроса

У меня проблема с 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, и он загружает данные сообщения. После этого ngonchanges больше не срабатывает при изменении selectedConversation.

Если я закомментирую вызов функции getMessages, то ngonchanges будет срабатывать каждый раз, когда selectedConversation изменяется.

Итак, я не уверен, что происходит в getMessages, который отключает ngonchanges от запуска. Запрос возвращает данные и звонок завершается. У кого-нибудь есть идеи?

2 ответа

Пожалуйста, измените ваш компонент как:

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

Это прекрасно работает для меня.

ngOnChanges срабатывает только если @Input менять referenceНапример, тип ввода string, boolean, numberнеизменный объект.

предполагать [selectedConversation] привязать к массиву arrSelected, если вы делаете что-то вроде arrSelected.pushМассив не меняется ref так что ngOnChanges не сработает.

так что вам нужно использовать неизменяемый массив, используя concat, sliceи т.д., чтобы изменить ссылку на массив

Другие вопросы по тегам