angular 中ng-class,当$invalid变化时,类名没有变化


在做表单验证的时候,需要一个功能,就是表单验证未成功的时候,保存按钮需要有一个类名disabled,所以很自然的想到ng-class={disabled:myForm.$invalid}这样去绑定类名,
但是渲染视图的时候,通过chrome的angular插件,已经看到$invalid的值为false,可是disabled类名还是存在...

想来是因为input等元素的value值一开始都是空的,所以$invalid是true,添加了disabled类名,但是当视图渲染完毕,input的value值都被替换成模型数据后,ng-class并没有检测到他的变化... 请问这种情况怎么处理,谢谢~~~

(通过$invalid来拼接class可以成功,但就是想知道怎么用ng-class来实现)

原代码是这样的:


 <a class="edit" ng-click="save(myForm.$invalid)" ng-class="{disabled:myForm.$invalid}">保存</a>

渲染后得到的结果是这样的:


 <a class="edit disabled" ng-click="save(myForm.$invalid)" ng-class="{disabled:myForm.$invalid}" href="">保存</a>

前端 ng-class angularjs JavaScript

农业重金属 9 years, 10 months ago

关于AngularJS的表单验证,可以参考下: http://www.ngnice.com/showcase/#/form/basic
如果不想使用原生的方式编写错误信息提示模板,参考我写的w5cVlidator插件: http://www.ngnice.com/posts/236860ed32d3e8

London answered 9 years, 10 months ago

你给 button 一个 class ,这样的话就算 button 看起来是 disabled ,但实际上还是能用的啊!你还得写而外的逻辑来禁用这个 button ,你不觉得很啰嗦么?

按照 HTML 规范,更合理的做法是使用 ng-disabled ,像 Bootstrap 这样的框架会直接捕捉 button disabled 状态并给予对应的样式,这才是更合理的做法。

你看一下这个例子好了: http://codepen.io/nightire/pen/pCikg

魔力的新月 answered 9 years, 10 months ago

Your Answer