Угловое обнаружение изменения материала с использованием ошибки выброса ngOnChanges, "ExpressionChangedAfterItHasBeenCheckedError" - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть свойство Input для компонента, и я должен отображаться, только если текущие данные не определены.

Я использую ngOnChanges для обнаружения изменений, но выдает ошибку " ExpressionChangedAfterItHasBeenCheckedError ".

Вот код,

  ngOnChanges(changes: { [propName: string]: SimpleChange}) {
if (changes['message'].currentValue) {
  this.open();
}}


open() {
    let config = new MatSnackBarConfig();
    config.verticalPosition = this.verticalPosition;
    config.horizontalPosition = this.horizontalPosition;
    config.duration = this.setAutoHide ? this.autoHide : 0;
    config.extraClasses = this.addExtraClass ? ['test'] : undefined;
    this.snackBar.open(this.message, this.action ? this.actionButtonLabel : undefined, config);
}

Ссылка на стек: https://stackblitz.com/edit/angular-snackbar-top-bdmsmz

Есть ли способ устранить ошибку.

Stackblitz error message

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Ошибка идет таким образом:

    ngOnChanges(changes: { [propName: string]: SimpleChange}) {
        setTimeout(()=>{
      if (changes['message'].currentValue) {
          this.open();
        }
        })
      }
0 голосов
/ 03 ноября 2018

Это проблема, связанная с событиями жизненного цикла Angular.

Один быстрый способ исправить это - обернуть некорректно работающий код, который в данном случае является вызовом snackBar.open, в setTimeout функцию

setTimeout(()=>{
  this.snackBar.open(this.message, this.action ? this.actionButtonLabel : undefined, config);
})

Демо

...