В моем ngOnInit я подписан на сервис, отображая объект и отображая указанный объект в моем шаблоне.
ngOnInit() {
this.id = +this.route.snapshot.paramMap.get('id');
this.privateService.someService(this.id)
.pipe(
take(1)
)
.subscribe(
(response) => {
this.mapRes = response;
}
)
}
Когда идентификатор в параметре URL изменяется, я изменяю данные в моем шаблоне на основе нового идентификатора. Я также использую оператор rxjs take (), чтобы сделать асинхронную операцию проще и менее запаздывающей. Но отставание продолжается. Это занимает почти секунду с того момента, как я изменяю параметр URL на повторный рендеринг шаблона с новыми данными.
ngDoCheck() {
let tempId = +this.route.snapshot.paramMap.get('id');
if(this.id === tempId) {
return;
}
else {
this.privateService.someService(this.id)
.pipe(
take(1)
)
.subscribe(
(response) => {
this.mapRes = response;
}
)
this.id = tempId;
}
}
Я думаю, что эта задержка происходит, потому что я все еще подписан на некоторый сервис в моем ngOnIt, а затем я снова подключаюсь к сервису в хуке ngDoCheck ().
Как я могу отменить подписку на сервис, не используя уничтожаемый компонент (как здесь), чтобы я мог повторно выполнить рендеринг того же компонента, но с другими данными?
редактирование:
Мне интересно, если моя проблема заключается в том, что изменение шаблона изменяет фактическую dom, и это является источником задержки вместо потока? Потому что после запуска ngDoCheck я возвращаю только 1 объект с помощью оператора take (), поэтому поток теоретически останавливается