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