angular - ngClass 似乎正在第一次加载;此后,表达式会根据用户交互进行更改,然后不拾取
问题描述
我现在正在学习 Angular。我了解了[ngClass]
指令。我想用它来添加和删除多个 css 类。第一次加载它工作正常。但是当我更改表达式变量时,它不会改变颜色。我有以下 HTML:
<span [ngClass]="errorClasses">{{errorMsg}}</span>
在 ts 中:
public hasError = false;
public errorClasses = {
"error" : this.hasError,
"success" : !this.hasError,
"italic" : true
};
所以它呈现:
<span class="success italic" ng-reflect-ng-class="[object Object]">Please enter Username and Password</span>
然后基于我所做的一些用户交互hasError=true
,现在我希望它呈现:
<span class="error italic" ng-reflect-ng-class="[object Object]">Please enter Username and Password</span>
这没有发生;CSS 类与开始时相同。 完整代码可在此处获得
解决方案
您的问题与值无关,ngClass
但与值更新无关,您需要errorClasses
用新值更新this.hasError
值。
您的showError
函数应如下所示:
showError(username:String, password:String) : void {
if(username.length === 0 && password.length === 0) {
this.errorMsg = "Please enter Username and Password";
}
else if(username.length) {
this.errorMsg = "Please enter Password";
}
else if(password.length) {
this.errorMsg = "Please enter Username";
}
this.hasError = true;
this.errorClasses = {
"error" : this.hasError,
"success" : !this.hasError,
"italic" : true
};
显然代码没有优化,也不是一个好方法,它只是为了指出你的问题,我们不应该像这样改变对象
推荐阅读
- javascript - console.log 和 alert 返回 undefined
- ios - 无法在 ios 中构建我的 nativescript 应用程序
- amazon-web-services - 从另一个 Terraform 计划中引用变量
- python - 如何将数值作为权重导入 Keras/Tensorflow 层?
- unit-testing - UserManager 不在单元测试中创建用户
- java - xxx 上的 @OneToOne 或 @ManyToOne 引用了一个未知实体:java.util.Set
- ruby-on-rails - 如何测试使用 Rails 5 创建的经过身份验证的 API?
- scala - 使用 es-hadoop 连接器和基于 aws 角色的签名将 Spark 数据帧写入 Elastic Search
- tensorflow - ValueError:检查输入时出错:预期 lstm_1_input 有 3 个维度,但得到了形状为 (6782、36) 的数组
- javascript - IntersectionObserver:滚动回顶部时触发事件