У меня есть счетчик в компоненте диалогового окна, который я хочу отобразить до и после выполнения HTTP-запроса, диалоговое окно открывается и закрывается, как ожидалось, но он всегда выдает ошибку ExpressionChangedAfterItHasBeenCheckedError в ответе на запрос, который я перехватываю в handle.pipe.
@Injectable()
export class ApiHttpInterceptor implements HttpInterceptor {
constructor(private router: Router, private sessionService: SessionService, private dialog: MatDialog) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const spinner = this.dialog.open(SpinnerDialogComponent, {
disableClose: true,
autoFocus: true,
width: '150px',
height: '150px',
panelClass: 'spinner'});
...
const authReq = req.clone({ headers: headers});
return next.handle(authReq).pipe(tap(
(event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
spinner.close();
}
return event;
}));
}
}
Я работаю с angular6
Как я могу это исправить?
не могли бы вы опубликовать всю ошибку
MatDialogModule: 1 стек: "Ошибка: ExpressionChangedAfterItHasBeenCheckedError: Выражение было изменено после проверки. Предыдущее значение: 'id: undefined'. Текущее значение: 'id: mat-dialog-1'. Кажется, что представление было создано после его родительский и его дочерние элементы были грязно проверены. Был ли он создан в ловушке обнаружения изменений? \ n в viewDebugError (локальный: 4200 / vendor.js: 60615: 15) \ n в expressionChangedAfterItHasBeenCheckedError (локальный: 4200 / vendor.js: 60603: 12) \ n в checkBindingNoChanges
@Chellappan, который у меня не сработал, может быть, потому, что я использую простой объект? У меня просто аннотация Injectable вместо Component, это просто служба, и для нее нет жизненного цикла. Я пробовал другое решение, даже переместил это в компонент, но потом получаю разные ошибки, поэтому я снова вернулся с этим.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)

