Вы хотите использовать ngOnChanges
, потому что он запускается каждый раз, когда изменяется значение @Input.
Полная подпись для ngOnChanges
:
ngOnChanges(changes: SimpleChanges): void
. Проверьте измененияобъект, чтобы увидеть, содержит ли он изменение в @Input и соответствует ли это значение ожидаемому, и ТОГДА сделать HTTP-запрос следующим образом:
ngOnChanges(changes: SimpleChanges) {
if (changes.groupId != null && fetch !== 'done') {
const res = this.dataService.getGroupMembers(this.groupId).subscribe(data =>
this.data = data;
this.fetch = 'done';
});
}
}
Нет необходимости отписываться, потому что подчиненные запросы HTTP будут завершеныавтоматически.Чтобы доказать это, сделайте следующее:
const res = this.dataService.getGroupMembers(this.groupId).subscribe(data =>
this.data = data;
this.fetch = 'done';
},
err => {
console.log('I errored');
},
() => {
console.log('I completed and won't fire again');
});
PS Причина, по которой ngAfterContentChecked стреляет как сумасшедший, заключается в том, что он выполняется крайне регулярно.