1

我有以下单选按钮:

<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。但是在视图中,该选项没有被选中。我究竟做错了什么?

4

1 回答 1

1

你不应该一起使用 ngModel 和 ngChecked。
ngChecked 是一种单向绑定,即它只会检查表达式的值并相应地设置输入,但如果您更改输入的值,它不会将值传递给它绑定到的变量。
另一方面,ngModel 将检查它绑定到的变量的值,并在输入发生变化时设置变量的值。
ngChecked 优于 ngModel 的优点是您可以使用表达式而不是变量。

尽管如此,如果两者都存在,则 ngModel“胜过”ngChecked(ngChecked 的优先级为 100,而 ngModel 的优先级为 1,请在此处搜索“优先级”:https ://docs.angularjs.org/api/ng/service/$compile )和ngChecked 表达式的更改不会传递给 ngModel 绑定到的变量

Val1你可以在这个 Plunker中看到,即使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 未绑定到 ng-checked 复选框
https://docs.angularjs.org/api/ng/directive/ngChecked

于 2015-11-06T13:28:10.033 回答