Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有$event.target的AngularJS复选框ng更改问题_Javascript_Angularjs_Checkbox - Fatal编程技术网

Javascript 带有$event.target的AngularJS复选框ng更改问题

Javascript 带有$event.target的AngularJS复选框ng更改问题,javascript,angularjs,checkbox,Javascript,Angularjs,Checkbox,我正在编写一个简单的AngularJS控制器,用于跟踪选中复选框的数量。试图避免使用$scope.$watch,而是使用ng change增加/减少总计数 HTML: <form ng-controller="MainCtrl"> <table> <tr ng-repeat="item in data"> <td> <input type="checkbox" value="{{

我正在编写一个简单的AngularJS控制器,用于跟踪选中复选框的数量。试图避免使用
$scope.$watch
,而是使用
ng change
增加/减少总计数

HTML

<form ng-controller="MainCtrl">
  <table>
    <tr ng-repeat="item in data">
      <td>
      <input type="checkbox" 
             value="{{item.id}}"
             ng-model="item.selected"
             ng-change="updateTotal($event)"> &nbsp; {{item.name}}
       </td>
    </tr>
  </table>
  <p>
      Total checked: {{totalSelected}}
   </p>
</form>
我在尝试访问
$event.target的控制器中不断收到错误:

TypeError: Cannot read property 'target' of undefined
我创建了一个用于重新创建的Plunk:

如果有人有任何想法或建议,我将不胜感激


多谢各位

ng change
函数不允许将
$event
作为变量传递

来自AngularJS官方github repo的合作者:

ng change不是处理变更事件的指令(我意识到 这让人困惑),但实际上是 调用ngModelController.$setViewValue()时通知,并且 值更改(因为ng更改会将侦听器添加到 $viewChangeListeners集合)。所以这是意料之中的

你可以阅读更多关于它的内容

您如何解决您的需求?

只需将所选的
项传递给ng change函数并检查其值

HTML

已更新


你可以在这里测试它,在这里

@levi是正确的。但更合乎逻辑的是,避免在控制器中选中
复选框。改为发送
项目
(或
项目。已选择
)。@DRobinson这很有意义,谢谢。您的建议是正确的,不要将其与DOM紧密结合。@levi,如果我们必须在
ng change
中停止事件传播,我们如何才能做到这一点?这看起来是非常优雅的解决方案,它符合DRobinson不使用checkbox.checked的建议。我回家后会试试的,谢谢@PhilipTenn我为您准备了一个plnkr,请检查我的答案。如果我们想将其与模型值分离,该怎么办?
TypeError: Cannot read property 'target' of undefined
  <input type="checkbox" 
         value="{{item.id}}"
         ng-model="item.selected"
         ng-change="updateTotal(item.selected)"> &nbsp; {{item.name}}
$scope.updateTotal = function(item_selected) {

    if (item_selected) {
      $scope.totalSelected++;
    }
    else {
      $scope.totalSelected--;
    } 
}