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>
阅读 17.5k
2 个回答

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题