AngularJS ng-class 添加类但在更改时不删除它

Posted

技术标签:

【中文标题】AngularJS ng-class 添加类但在更改时不删除它【英文标题】:AngularJS ng-class adding class but not removing it on change 【发布时间】:2017-11-29 00:41:41 【问题描述】:

我在 ng-repeat 中有一个文本输入。当我单击输入时,我将附加一个日期选择器并在选择日期时触发输入上的 change()。

$(this).val(picker.startDate.format(datePickerOutputFormat)).change();

这是可行的,AngularJS 范围会接受更改。我在页面上有一个绑定到日期值的跨度,因此我可以看到这种变化。

在输入中,我想使用 ng-class 突出显示空日期。

<input type="text"
  class="form-control single-date-input"
  placeholder="dd/mm/yyyy"
  ng-model="demoInRepeat.date"
  ng-class=" 'invalid-input' : null == demoInRepeat.date ">

这工作正常,直到我手动编辑输入值并删除日期。如果我再次从日期选择器中选择日期,则无效输入类仍然存在,即使我用来显示范围的输入和跨度上的值都更新了。

即使我显示 ng-class 条件的评估值,这也会按预期显示真/假。

 null == demoInRepeat.date 

我希望在重新选择日期后删除无效输入类。有什么想法吗?

使用 AngularJS v1.5.8

【问题讨论】:

请阅读:***.com/questions/14994391/… 最后踢 jQuery。 =) 【参考方案1】:

我认为此解决方案有助于在重新选择日期后删除无效输入类。再创建一个名为 valid-input 的类并为其添加 CSS 即可。

<input type="text"
  class="form-control single-date-input"
  placeholder="dd/mm/yyyy"
  ng-model="demoInRepeat.date"
  ng-class=" 'invalid-input' : null == demoInRepeat.date , 'valid-input' : null != demoInRepeat.date ">

【讨论】:

@user1107685 如果您有解决方案,我将不胜感激,是的,如果您想在某些情况下应用 CSS,那么此解决方案会更好。 对不起,我认为这有效,但实际上卡在有效输入上,当我再次使输入无效时不再显示无效输入。 能否请您为此创建 plunker,我会更好地帮助您。【参考方案2】:

我使用不使用 ng-class 的解决方法来解决这个问题。

我改变了这个...

<input type="text"
  class="form-control single-date-input"
  placeholder="dd/mm/yyyy"
  ng-model="demoInRepeat.date"
  ng-class=" 'invalid-input' : null == demoInRepeat.date ">

到这里

<input type="text"
  class="form-control single-date-input  null == demoInRepeat.date ? 'invalid-input' : '' "
  placeholder="dd/mm/yyyy"
  ng-model="demoInRepeat.date">

我仍然不明白为什么原来的方法不起作用。

【讨论】:

以上是关于AngularJS ng-class 添加类但在更改时不删除它的主要内容,如果未能解决你的问题,请参考以下文章

如何在angularjs中动态地将样式属性添加到具有ng-class的元素

angularjs中ng-class的多个条件

AngularJS之ng-class

html ng-class angularjs

使用 ng-class 的 AngularJS 切换类

angularjs 指令之ng-class