我有以下单选按钮:
<input type="radio" ng-value="option.text" ng-model="selected.value" name="option" ng-checked="poll_post.poll_option_id == option.id">
我仔细检查了
poll_post.poll_option_id
和option.id
是否相等。因此ng-checked内部的表达式被评估为true。但是在视图中,未选中该选项。我究竟做错了什么? 最佳答案
您不应同时使用ngModel和ngChecked。
ngChecked是一种单向绑定,即它将仅检查表达式的值并相应地设置输入,但是如果您更改输入的值,则不会将该值传递给绑定的变量。
另一方面,ngModel将同时检查绑定到的变量的值,并在输入更改时设置变量的值。
ngChecked比ngModel的优势在于您可以使用表达式而不是变量。
不过,如果两者都存在,则ngModel“胜过” ngChecked(ngChecked的优先级为100,而ngModel的优先级为1,请在此处搜索“ priority”:https://docs.angularjs.org/api/ng/service/ $ compile),并且ngChecked表达式的更改不会传递给变量ngModel绑定到
您可以在此Plunker中看到,即使Val1
具有checked="true"
变量$scope.selected
被设置为Val2
,所以ng-model胜过ng-checked http://plnkr.co/edit/nae3b46KNzFKVTqEQPG3?p=preview
如果要以编程方式更改复选框的状态,则应编辑已将ng-model绑定到的变量,或删除ng-model并仅保留ng-checked(这取决于您的工作)。
有关更多信息:
AngularJS: ng-model not binding to ng-checked for checkboxes
https://docs.angularjs.org/api/ng/directive/ngChecked