我在Angular 4应用程序中使用Angular Material。当我尝试使用MatSnackBar
中的ngAfterViewInit()
时,我遇到了错误:
ExpressionChangedAfterItHasBeenCheckedError:表达式已更改 检查后。上一个值:'undefined'。当前值: 'visible-bottom'。看起来这个视图是在其父级及其子级被脏检查后创建的。它是否已在变更检测钩子中创建?
我已使用ChangeDetectorRef
来检测更改,但似乎无效。
以下是我一直在处理的代码:
constructor(private matSnackBar: MatSnackBar, private router: Router, private cdr: ChangeDetectorRef) { }
ngOnInit() {}
ngAfterViewInit() {
let snackBarRef = this.matSnackBar.open('Redirecting to dashboard..', 'Cancel', {
duration: 10000
});
snackBarRef.onAction().subscribe(() => {
console.log("Cancelled");
});
this.cdr.detectChanges();
}
请帮我解决这个问题。
答案 0 :(得分:3)
尝试在构造函数中移动snackbar:
constructor(private matSnackBar: MatSnackBar, private router: Router, private cdr: ChangeDetectorRef) {
let snackBarRef = this.matSnackBar.open('Redirecting to dashboard..', 'Cancel', {
duration: 10000
});
snackBarRef.onAction().subscribe(() => {
console.log("Cancelled");
});
}
答案 1 :(得分:2)
一个潜在但原始的解决方案是使用setTimeout -
let snackBarRef;
setTimeout(() => {
snackBarRef = this.matSnackBar.open('Redirecting to dashboard..', 'Cancel', {
duration: 10000
});
});