Javascript 角度ng更改不适用于复选框

Javascript 角度ng更改不适用于复选框,javascript,html,angularjs,checkbox,Javascript,Html,Angularjs,Checkbox,下面是我的代码。单击“全部选择”按钮更改单个复选框时,不会触发单个复选框的ng更改,但单独选择时,会触发单个复选框的ng更改。我需要在单击“全选”按钮时触发itemChecked方法 这里有一个相同的例子 HTML 请让我知道我需要更改什么或我做错了什么来修复此问题。您在ng model中设置了错误的变量。ng模型部分应为: ng-model="list[$index]" 要收听收藏,必须使用以下命令: $scope.$watchCollection 它在以下代码中工作正常,请检查代码段:

下面是我的代码。单击“全部选择”按钮更改单个复选框时,不会触发单个复选框的ng更改,但单独选择时,会触发单个复选框的ng更改。我需要在单击“全选”按钮时触发
itemChecked
方法

这里有一个相同的例子

HTML
请让我知道我需要更改什么或我做错了什么来修复此问题。

您在
ng model
中设置了错误的变量。ng模型部分应为:

ng-model="list[$index]"
要收听收藏,必须使用以下命令:

$scope.$watchCollection
它在以下代码中工作正常,请检查代码段:

var-app=angular.module(“测试”,[]);
app.controller(“TestController”[
“$scope”,
“$http”,
函数($scope,$http){
$scope.list=[false,false,false,false,false];
$scope.itemChecked=函数(i){
控制台日志(i);
console.log($scope.list[i]);
};
$scope.$watchCollection('list',函数(oldValue,newValue){
//console.log(oldValue);
//console.log(newValue);
//log($scope.list);
对于(var i=0;i

{{$index+1}}
全选
您需要的是方法。仅当值从HTML更改时有效。当控制器中的值更改时,不会触发

app.controller("TestController", [
  "$scope",
  "$http",
  function($scope, $http) {
    $scope.list = [false, false, false, false, false];

    $scope.itemChecked = function(i) {
      console.log(i);
    };

    $scope.toggleSelection = function() {
      for (var i in $scope.list) {
        $scope.list[i] = true;
      }
    };


    /*********************************************************/        
    $scope.$watchCollection('list', function (newVal, oldVal) {   
           console.log('collection changed') });
    }
   /*********************************************************/      

]);
或者,如果您只想在单击
selectAll按钮时调用
itemChecked
方法,则只需调用
itemChecked
内部
切换选择
方法即可

$scope.toggleSelection = function() {
      for (var i in $scope.list) {
        $scope.list[i] = true;
        $scope.itemChecked(i);
      }
    };

对不起,我之前不清楚,我已经更新了问题。单击“全选”按钮时,它不会显示。各个复选框被触发得很好。我希望在单击全选按钮时调用
itemChecked
方法。更新的代码中仍然没有出现这种情况。但是,更新的代码没有调用方法
itemChecked
。无需调用该方法:如果需要,则从$scope.$watchCollection手动调用。每一项更改或所有更改都将触发$scope.$watchCollection。是的,如果您手动(通过代码)检查它,则不会触发它。这是我在哪里以及如何使用
$scope.watch
方法?你能告诉我更多的细节吗?我想在点击全选按钮时调用
itemChecked
方法。如何实现这一点?
我希望在单击全选按钮时调用itemChecked方法
?如果不涉及其他逻辑,并且您只想调用
itemChecked
方法,那么您不需要在
toggleSelection
方法中调用它吗。这样,当您单击selectAll按钮时,它将调用
toggleSelection
,在切换状态后,它只调用实际工作的
itemChecked
,谢谢。如果你能在答案中加上这个,我会接受的。
app.controller("TestController", [
  "$scope",
  "$http",
  function($scope, $http) {
    $scope.list = [false, false, false, false, false];

    $scope.itemChecked = function(i) {
      console.log(i);
    };

    $scope.toggleSelection = function() {
      for (var i in $scope.list) {
        $scope.list[i] = true;
      }
    };


    /*********************************************************/        
    $scope.$watchCollection('list', function (newVal, oldVal) {   
           console.log('collection changed') });
    }
   /*********************************************************/      

]);
$scope.toggleSelection = function() {
      for (var i in $scope.list) {
        $scope.list[i] = true;
        $scope.itemChecked(i);
      }
    };