Я заметил, что angular ActivatedRoute немедленно активирует обнаружение изменений, что вызовет ошибку ExpressionChangedAfterItHasBeenCheckedError. Как я мог этого избежать?
public ngOnInit(): void {
this.subscriptions.push(this.pageService.pageChanges.subscribe(() => {
this.currentPage = this.pageService.currentPageData();
}));
this.route.params
.switchMap(params => {
console.info("route.params.switchMap called: ", params);
const requestedPageNumber = parseInt(params['page'], 10);
return this.wizard.getPage(requestedPageNumber);
})
.subscribe((refocus) => {
console.info("route.params subscribed called: ", refocus);
this.refocus = !!refocus;
});
this.subscriptions.push(this.pageService.saveChanges.subscribe(() => {
if (this.page) {
this.page.saveData();
}
}));
}





Хотя это не чистое решение, я рекомендую setTimeout(). Это выполняет асинхронное выполнение на хуке жизненного цикла.
Пример:
setTimeout(() => {
this.route.params
.switchMap(params => {
console.info("route.params.switchMap called: ", params);
const requestedPageNumber = parseInt(params['page'], 10);
return this.wizard.getPage(requestedPageNumber);
})
.subscribe((refocus) => {
console.info("route.params subscribed called: ", refocus);
this.refocus = !!refocus;
});
this.subscriptions.push(this.pageService.saveChanges.subscribe(() => {
if (this.page) {
this.page.saveData();
}
}));
), 1000};
Лучше использовать ChangeDetectorRef.detectChanges () (если вам нужно), так как это его цель