Ale*_*dro 5 angular-material angular
在我的角度4项目,我已经实现了一些MatSnackbar 显示一些有用messate给用户.除了一个案例外,所有小吃都很好用......
当用户尝试访问应用程序但令牌已过期时,我的身份验证保护将用户重定向到登录页面并显示一个快餐栏,这个零食吧似乎运行良好,但在控制台我可以看到此错误:
MatSnackBarContainer_Host.html:1错误错误:ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后发生了变化.上一个值:'undefined'.当前值:'visible-bottom'.看起来这个视图是在其父级及其子级被脏检查后创建的.它是在变更检测钩子中创建的吗?at viewDebugError(core.es5.js:8434)[angular] at expressionChangedAfterItHasBeenCheckedError(core.es5.js:8412)[angular] at checkBindingNoChanges(core.es5.js:8576)[angular] at checkNoChangesNodeInline(core.es5.js) :12455)[angular]在checkNoChangesNode(core.es5.js:12429)[angular] at debugCheckNoChangesNode(core.es5.js:13209)[angular] at debugCheckRenderNodeFn(core.es5.js:13149)[angular] at Object .eval [as updateRenderer](MatSnackBarContainer_Host.html:1)[angular] at Object.debugUpdateRenderer [as updateRenderer](core.es5.js:13131)[angular] at checkNoChangesView(core.es5.js:12251)[angular] at callWithDebugContext(core.es5.js:13493)[angular] at Object.debugCheckNoChangesView [as checkNoChangesView](core.es5.js:13040)[angular] at ViewRef_.webpackJsonp .../../../core/@ angular/core.es5.js.ViewRef_.checkNoChanges(core.es5.js:10197)[angular] at vendor.bundle.js:92838:67 [angular] View_MatSnackBarContainer_Host_0 @ MatSnackBarContainer_Host.html:1 MatSnackBarContainer_Host .html:1错误上下文DebugContext_
在登录页面的ngOnInit中,我显示了快餐栏:
ngOnInit() {
if (this.route.snapshot.queryParams['returnUrl']) {
this.openSnackBar(('token expired'));
}
}
Run Code Online (Sandbox Code Playgroud)
-
openSnackBar(message: string, action?: string) {
return this.snackBar.open(message, action, {
duration: 3000,
});
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误
小智 8
这不是重大问题:这是一个生命周期问题.
如果您不知道,Angular将遵循生命周期,在该生命周期中,他检查更改,分配变量等.
在你的情况下,他告诉你,在将变量标记为已检查后,你已经改变了变量的值,并且它与他混淆了.您可以在错误中看到新值:
visible-bottom
Run Code Online (Sandbox Code Playgroud)
这意味着你的代码中的某个地方,你做了一个
this.myVar = 'visible-bottom';
Run Code Online (Sandbox Code Playgroud)
要纠正此错误,只需将其包围在超时内即可
setTimeout(() => this.myVar = 'visible-bottom');
Run Code Online (Sandbox Code Playgroud)
这将告诉Angular
我知道你已经检查了我的变量,但是我需要更改它的值,所以请重新启动你的变化检测
| 归档时间: |
|
| 查看次数: |
3014 次 |
| 最近记录: |