http://plnkr.co/edit/RP9SpO1qGjn5Ua6pZJ3D?p=preview
JS
angular.module("sampleapp", []).controller('samplecontroller', function($scope,$rootScope) {
$scope.radii = [
{id:.25, checked:false, name:"1/4 Mile"},
{id:.5, checked:false, name:"1/2 Mile"},
{id:1, checked:false, name:"1 Mile"},
{id:2, checked:true, name:"2 Mile"},
{id:3, checked:false, name:"3 Mile"},
{id:4, checked:false, name:"4 Mile"},
{id:5, checked:false, name:"5 Mile"}
];
$scope.handleRadioClick = function(){
alert();
};
});
和html
<div class="radio">
<label>
<input type="radio" name="radius"
ng-change="handleRadioClick()"
ng-checked="radius.checked">
{{radius.name}}
</label>
</div>
</li>
注意&#34; 2英里&#34;根据半径范围结构检查无线电输入。为什么ng-change不触发函数?
如果我添加ng-model,函数会触发,但ng-checked不起作用。
答案 0 :(得分:8)
这是因为您没有使用ng-model
:
<强> FORKED PLUNKER 强>
<div class="radio" ng-repeat="radius in radii" id="selectradius-{{radius.id}}">
<label>
<input type="radio" name="radius"
ng-change="handleRadioClick(selectedRadius)"
ng-model="radius.checked">
{{radius.name}}
</label>
</div>
<强>更新强>
抱歉,我没有注意到您想要检查默认单选按钮,如果是这种情况,那么您采取的方法是不正确的。您必须将模型视为一组单选按钮中的非单个部件,但作为一个整体,它们应该是一个值。您不必使用ng-repeat
的无线电范围变量,而是使用另一个ng-model
作为selectedRadius
模型。您输入无线电需要有一个值,在这种情况下,我们将使用ng-value
来确定模型的当前值。
UPDATED PLUNKER [ 2014年9月]
<强> JAVASCRIPT 强>
<强> 控制器 强>
$scope.radii = [
{id:.25, name:"1/4 Mile"},
{id:.5, name:"1/2 Mile"},
{id:1, name:"1 Mile"},
{id:2, name:"2 Mile"},
{id:3, name:"3 Mile"},
{id:4, name:"4 Mile"},
{id:5, name:"5 Mile"}
];
// selected value is {id:2, name:"2 Mile"}
$scope.selectedRadius = $scope.radii[3];
<强> HTML 强>
<div class="radio" ng-repeat="radius in radii" id="selectradius-{{radius.id}}">
<label>
<input type="radio" name="radius"
ng-change="handleRadioClick(radius)"
ng-model="selectedRadius"
ng-value="radius">
{{radius.name}}
</label>
</div>
UPDATED PLUNKER [ 2015年1月]
dcz.switcher下面的问题表明,当重新选择单选按钮时,上面的解决方案不会触发ng-change
事件处理程序。主要问题是ng-model
指的是ng-repeat
的范围,而不是指第二次更改的控制器范围。要解决此问题,您可以使用$parent
属性。另一种方法是使用controllerAs
别名并使用别名本身来访问控制器的属性。要了解有关AngularJS范围的更多信息,建议您 read more about it in here 。
HTML 的
<div class="radio" ng-repeat="radius in radii" id="selectradius-{{radius.id}}">
<label>
<input type="radio" name="radius"
ng-change="handleRadioClick($parent.selectedRadius)"
ng-model="$parent.selectedRadius"
ng-value="radius">
{{radius.name}}
</label>
</div>
答案 1 :(得分:4)
使用默认值,一切都会像魅力一样,不需要观察范围或任何东西...... 是的,你需要ng-model
HTML示例:
$('div.new').data('depth') === 1.00;
JS可选:
<input type="checkbox"
ng-model="row.active"
ng-checked="row.active"
ng-true-value="1"
ng-false-value="0"
ng-change="update(row)"
/>
<!-- test -->
{{ row.active }}
答案 2 :(得分:2)
这是因为ng-change requires ngModel to be present.
希望这会有所帮助。干杯!
答案 3 :(得分:0)
ng-change
指令要求使用ng-model
指令。
从文档中:
ngChange
请注意,此伪指令要求
ngModel
必须存在。
ng-model
和ng-checked
指令不应同时使用从文档中:
ngChecked
如果
ngChecked
中的表达式为真,则在元素上设置选中的属性。请注意,此指令不应与
ngModel
一起使用,因为这可能导致意外行为。
而是从控制器设置所需的初始值。
有关更多信息,请参见