angular - 使用 [ngClass] 的问题 - ExpressionChangedAfterItHasBeenCheckedError
问题描述
当我尝试在我的 Angular 应用程序中使用 [ngClass] 时,我收到以下错误:
ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后已更改。以前的值:'ngClass:未定义'。
它在我收到错误后调用更改时起作用,问题似乎出在初始化期间。
这是HTML:
<div class="switch-wrapper">
<button [ngClass]="loginSelected ? 'selected' : ''" (click)="selectLogin()">
Login
</button>
<button [ngClass]="signupSelected ? 'selected' : ''" (click)="selectSignup()">
Signup
</button>
</div>
这是 TS:
export class LoginComponent implements AfterContentInit {
loginSelected = true;
signupSelected = false;
constructor(private cdRef: ChangeDetectorRef) {
}
ngAfterContentInit() {
this.cdRef.detectChanges();
}
selectLogin() {
this.loginSelected = true;
this.signupSelected = false;
}
selectSignup() {
this.loginSelected = false;
this.signupSelected = true;
}
}
这个问题在这里被问了很多次,但建议的解决方案似乎对我不起作用。我尝试过的事情:
- 不使用 ChangeDetector。
- 进行更改,然后调用 .detechChanges()。
- 调用 .detechChanges() 然后进行更改。
- 只是初始化值。
- 使用 ngOnInit 和不同类型的 ngAfter***()。
- 以上任意组合。
如果有人可以帮助我,我将不胜感激。我知道错误可能是我的一部分,这让我发疯了。谢谢!
解决方案
就.detectChanges();
这样移动。
selectLogin() {
this.loginSelected = true;
this.signupSelected = false;
this.cdRef.detectChanges();
}
selectSignup() {
this.loginSelected = false;
this.signupSelected = true;
this.cdRef.detectChanges();
}
推荐阅读
- javascript - 向 JSON 服务器发出 POST 和 GET 请求
- java - 如何在java中使用ElasticsearchRepository使用elasticsearch实现逻辑分页
- python - 无法在 Google Colab 中打开文件(文件读取失败:时间 = Sun Aug 23 12:19:51 2020...)
- java - java密码到c#等效
- python - 让每个子模块定义自己的子解析器
- node.js - rsync vs fs.readStream - 如何处理特殊字符
- sqlite - 在 sqlite 中搜索多个单词和智能排序
- c# - 通过使用 linq 将对象列表转换为字符串和 int 数组来创建对象
- python - 两个格式化字符串合二为一,只有一个值
- algorithm - 计算具有 k 个部分的整数部分,每个部分低于某个阈值 m