我有以下单选按钮:

<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_idoption.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

08-18 23:49