我正在尝试在 Angular 上做一些相对简单的事情,但我无法弄清楚为什么它不起作用。最终,我只想在复选框被选中时执行一个功能,然后在未选中时执行另一个功能。
所以我尝试使用 ng-model 来评估 foo 是否选中或未选中复选框,然后我可以做一个 if 语句来选择一个函数。我认为 {{foo}} 切换为 true/false,但 console.log 始终显示未定义。有人知道为什么吗?
HTML:
<div ng-repeat="element in elements">
<input type="checkbox" ng-model="foo" /> {{foo}}
</div>
脚本:
$scope.$watch('foo', function(){
console.log($scope.foo);
});
编辑:糟糕!我重复了一遍。有没有办法在重复中实现这种效果?
最佳答案
你做了什么
您的观察者在 ngRepeat
之外。您的 ngModel
位于 ngRepeat
中。
怎么了
内部 ngModel
在内部作用域上创建了一个 foo
属性。您的观察者读取外部作用域不存在的 foo
属性。
解决方案
例如,有一个 model
对象,附加到您的外部范围
$scope.model = { foo: false };
将内部 ngModel
设置为 model.foo
。
有什么区别?
使用这个解决方案,ngModel
获得了正确的 model
对象,因为范围继承,它在分配 foo
时不会尝试做什么> 无需遍历您编写的原型(prototype)链的属性。
关于javascript - $watch 未使用复选框检测模型更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22312258/