Javascript 如何获取复选框值并将其存储在angularjs数组变量中?

Javascript 如何获取复选框值并将其存储在angularjs数组变量中?,javascript,angularjs,checkbox,Javascript,Angularjs,Checkbox,我已经创建了数组列表,并将其列为多个复选框。如果我选择了,我将存储到数组变量中,如果我取消选择,它需要从数组中删除。我尝试了这一点,但是取消选中值并没有从数组变量中删除 下面是我的代码和 HTML <div ng-app="myApp" ng-controller="MyCtrl"> <lable ng-repeat="list in lists"> <input type="checkbox" name="chk[]" ng-model="lst"

我已经创建了数组列表,并将其列为多个复选框。如果我选择了,我将存储到数组变量中,如果我取消选择,它需要从数组中删除。我尝试了这一点,但是取消选中值并没有从数组变量中删除

下面是我的代码和

HTML

<div ng-app="myApp" ng-controller="MyCtrl">
    <lable ng-repeat="list in lists">
    <input type="checkbox" name="chk[]" ng-model="lst" value="{{list.vl}}" ng-change="change()">
    {{list.vl}} <br>
    </lable>
</div>

首先,我假设列表的syntax不正确,因为您应该有lists

 $scope.lists = [
            {'vl' : 1},
            {'vl' : 2},
            {'vl' : 3},
            {'vl' : 4},
            {'vl' : 5},
        ];
然后,这是不必要的:
$scope.lst={}因为您可以影响列表中每个项目的模型,如:

 <input type="checkbox" name="chk[]" ng-model="item.lst" value="{{list.vl}}" ng-change="change()">

您可以在
ngChange
中传递数据,您需要确定是要推送还是拼接

HTML

请注意,每个项目的当前值存储在隔离范围的变量
active
中。如果您需要模型中的值,只需如下绑定:

<lable ng-repeat="list in lists">
    <input type="checkbox" ng-model="list.active" ng-change="change(list, active)" >
</lable>


使用数组的推送和弹出

change()发送两个值时,首先选择ng model提供的值,然后发送要推送或切片(删除)的值


$scope.change=函数(检查,值){
如果(检查){
$scope.lst.push(值);
}否则{
$scope.lst.splice($scope.lst.indexOf(value),1);
}
};


希望有帮助:)

我还以不同的方式为您的问题创建了解决方案。我做了一些比你简单的事情。这可能对你有帮助。检查下面的示例代码:

app.js

var myApp = angular.module('myApp', []);

    myApp.controller('MyCtrl', function($scope){
        $scope.lists = [
            {'vl' : 1, 'state' : false},
            {'vl' : 2, 'state' : false},
            {'vl' : 3, 'state' : false},
            {'vl' : 4, 'state' : false},
            {'vl' : 5, 'state' : false}
        ];

        $scope.change = function(id){
            $scope.lists[id].state = !$scope.lists[id].state;
            console.log($scope.lists);
        };
    });
index.html

<div ng-app="myApp" ng-controller="MyCtrl">
    <lable ng-repeat="list in lists">
    <input type="checkbox" value="{{list.vl}}" ng-click="change($index)">
    {{list.vl}} <br>
    </lable>
</div>

{{list.vl}}

如何获取索引的值?@Silambu$index是
ngRepeat
的魔力。我不确定您要在阵列中存储什么。在我的示例中,我按下了
$index
。我想这不是你真正想要的,但从你的问题来看,这是非常不清楚的。不要依赖$index,因为在ng repeat上应用过滤器时它将不起作用。仅供参考;)@斯奎洛德,你说得对。我认为最好将信息传递给实际需要的
change
。“我从这个问题上并没有真正理解他的意图。”Silambu更新了答案并回答fiddle@Silambu您将不再需要
值=“{{list.vl}}”
。只需删除它,您的代码就会更干净。很抱歉!我从中选中了所有复选框,如果我取消选中第二个复选框,则不会从该数组中删除第二个复选框值。我需要从数组中删除未选中的复选框值。@Silambu愚蠢的错误我使用了pop而不是切片:P
$scope.change = function(list, active){
    if (active)
        $scope.lst.push(list);
    else
        $scope.lst.splice($scope.lst.indexOf(list), 1);
};
<lable ng-repeat="list in lists">
    <input type="checkbox" ng-model="list.active" ng-change="change(list, active)" >
</lable>
<input type="checkbox" name="chk[]" ng-model="lst" value="{{list.vl}}" ng-change="change(lst,list.vl)">

$scope.change = function(check,value){
        if(check){
            $scope.lst.push(value);
        }else{
             $scope.lst.splice($scope.lst.indexOf(value), 1);
        }
    };
var myApp = angular.module('myApp', []);

    myApp.controller('MyCtrl', function($scope){
        $scope.lists = [
            {'vl' : 1, 'state' : false},
            {'vl' : 2, 'state' : false},
            {'vl' : 3, 'state' : false},
            {'vl' : 4, 'state' : false},
            {'vl' : 5, 'state' : false}
        ];

        $scope.change = function(id){
            $scope.lists[id].state = !$scope.lists[id].state;
            console.log($scope.lists);
        };
    });
<div ng-app="myApp" ng-controller="MyCtrl">
    <lable ng-repeat="list in lists">
    <input type="checkbox" value="{{list.vl}}" ng-click="change($index)">
    {{list.vl}} <br>
    </lable>
</div>