javascript - $watch 未使用复选框检测模型更改

标签 javascript angularjs checkbox

我正在尝试在 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/

相关文章:

javascript - 如何在运行其余代码之前在工厂中运行http请求

javascript - 将图像上传到服务器 Angular JS

mysql - CiviCRM CRM_Core_DAO::VALUE_SEPARATOR 如何在纯 SQL 中使用它

javascript - 有什么方法可以在单击按钮时删除过滤器

javascript - 通过比较值来选中复选框

javascript - Angular : combine animation with a scope change

带复选框的 java gwt celltable

当数组mysql查询中的复选框值时选中Php表单?

javascript - 如何使用javascript替换对象数组中的键和值

javascript 为 0011 返回 9