简体   繁体   English

在angularjs中单击按钮(检查选定的电话)后,如何取消选中所有复选框?

[英]How can i uncheck all checkboxes after click button(check selected phones) in angularjs?

Here i have added my code below.after Check selected phones button clicked how to uncheck all checked checkboxes pls some one help me out for this . 在这里,我在下面添加了我的代码。在“选中选定的电话”按钮后,单击如何取消选中所有选中的复选框,请为此提供一些帮助。 Expectation: after button click all checkboxes should unchecked i have added fiddle also help me out 期望:单击按钮后,应取消选中所有复选框,我已经添加了小提琴,也可以帮助我

 var myApp = angular.module('myApp',[]); myApp.controller('MyCtrl', function($scope,$http) { $scope.selectedBrands = []; $scope.selectBrand = function(selectedphone) { // If we deselect the brand if ($scope.selectedBrands.indexOf(selectedphone.brandname) === -1) { // Deselect all phones of that brand angular.forEach($scope.phones, function(phone) { if (phone.brandname === selectedphone.brandname) { phone.selected = false; } }); } } $scope.checkSelectedphones = function() { var modelNames = []; var jsonArr = []; var subModelArr = []; var aletrMsg = ''; angular.forEach($scope.phones, function(phone) { if (phone.selected) { modelNames.push(phone); var found = jsonArr.some(function(el) { if (el.model === phone.brandname) { el.subModel.push(phone.modelname); return true; } }); if (!found) { subModelArr.push(phone.modelname); jsonArr.push({ model: phone.brandname, brand :'Nokia', subModel: subModelArr, city:'Noida', }); subModelArr=[]; } } }); console.log(modelNames.length); if(modelNames.length == 0) { alert(modelNames.length ? aletrMsg : 'No phones selected!'); }else { console.log(jsonArr); } } $scope.phones = [{ id: "986745", brandname: "Nokia", modelname: "Lumia 735 TS" }, { id: "896785", brandname: "Nokia", modelname: "Nokia Asha 230" }, { id: "546785", brandname: "Nokia", modelname: "Lumia 510" }, { id: "144745", brandname: "Samsung", modelname: "Galaxy Trend 840" }, { id: "986980", brandname: "Samsung", modelname: "Galaxy A5" }, { id: "586980", brandname: "Samsung", modelname: "Galaxy Note 4 Duos" }, { id: "986980", brandname: "Samsung", modelname: "Galaxy A5" }, { id: "586980", brandname: "Samsung", modelname: "Galaxy Note Duos" }, { id: "232980", brandname: "Htc", modelname: "Htc One X9" }, { id: "456798", brandname: "Htc", modelname: "Desire 820" }, { id: "656798", brandname: "Htc", modelname: "Desire 810S" }]; }); myApp.filter('unique', function() { return function(collection, keyname) { var output = [], keys = []; angular.forEach(collection, function(item) { var key = item[keyname]; if(keys.indexOf(key) === -1) { keys.push(key); output.push(item); } }); return output; }; }); 
  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.js"></script> 
 <div ng-controller="MyCtrl"> <button ng-click="checkSelectedphones()"> Check selected phones </button> <div ng-repeat="phone in phones | unique:'brandname'"> <label> <input type="checkbox" ng-true-value="'{{phone.brandname}}'" ng-false-value="''" ng-model="selectedBrands[$index]" ng-change="selectBrand(phone)"> {{phone.brandname}} </label> </div> <br> <div ng-repeat="brand in selectedBrands track by $index" ng-if="brand"> {{brand}} <div ng-repeat="phone in phones" ng-if="phone.brandname === brand"> <label> <input type="checkbox" ng-model="phone.selected" > {{phone.modelname}} </label> </div> </div> </div> 

demo 演示

Since you have the checked state saved in selectedBrands , you can just reset the array in the button click like 由于您已将选中状态保存在selectedBrands ,因此只需按如下所示的按钮即可重置阵列:

$scope.selectedBrands = [];

You will also have to update the phone.selected value in the loop 您还必须在循环中更新phone.selected

 var myApp = angular.module('myApp', []); myApp.controller('MyCtrl', function($scope, $http) { $scope.selectedBrands = []; $scope.selectBrand = function(selectedphone) { // If we deselect the brand if ($scope.selectedBrands.indexOf(selectedphone.brandname) === -1) { // Deselect all phones of that brand angular.forEach($scope.phones, function(phone) { if (phone.brandname === selectedphone.brandname) { phone.selected = false; } }); } } $scope.checkSelectedphones = function() { var modelNames = []; var jsonArr = []; var subModelArr = []; var aletrMsg = ''; angular.forEach($scope.phones, function(phone) { if (phone.selected) { modelNames.push(phone); var found = jsonArr.some(function(el) { if (el.model === phone.brandname) { el.subModel.push(phone.modelname); return true; } }); if (!found) { subModelArr.push(phone.modelname); jsonArr.push({ model: phone.brandname, brand: 'Nokia', subModel: subModelArr, city: 'Noida', }); subModelArr = []; } } phone.selected = false; }); console.log(modelNames.length); if (modelNames.length == 0) { alert(modelNames.length ? aletrMsg : 'No phones selected!'); } else { console.log(jsonArr); } $scope.selectedBrands = []; } $scope.phones = [{ id: "986745", brandname: "Nokia", modelname: "Lumia 735 TS" }, { id: "896785", brandname: "Nokia", modelname: "Nokia Asha 230" }, { id: "546785", brandname: "Nokia", modelname: "Lumia 510" }, { id: "144745", brandname: "Samsung", modelname: "Galaxy Trend 840" }, { id: "986980", brandname: "Samsung", modelname: "Galaxy A5" }, { id: "586980", brandname: "Samsung", modelname: "Galaxy Note 4 Duos" }, { id: "986980", brandname: "Samsung", modelname: "Galaxy A5" }, { id: "586980", brandname: "Samsung", modelname: "Galaxy Note Duos" }, { id: "232980", brandname: "Htc", modelname: "Htc One X9" }, { id: "456798", brandname: "Htc", modelname: "Desire 820" }, { id: "656798", brandname: "Htc", modelname: "Desire 810S" }]; }); myApp.filter('unique', function() { return function(collection, keyname) { var output = [], keys = []; angular.forEach(collection, function(item) { var key = item[keyname]; if (keys.indexOf(key) === -1) { keys.push(key); output.push(item); } }); return output; }; }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.js"></script> <div ng-app="myApp"> <div ng-controller="MyCtrl"> <button ng-click="checkSelectedphones()"> Check selected phones </button> <pre>{{selectedBrands}}</pre> <div ng-repeat="phone in phones | unique:'brandname'"> <label> <input type="checkbox" ng-true-value="'{{phone.brandname}}'" ng-false-value="''" ng-model="selectedBrands[$index]" ng-change="selectBrand(phone)">{{phone.brandname}} </label> </div> <br> <div ng-repeat="brand in selectedBrands track by $index" ng-if="brand"> {{brand}} <div ng-repeat="phone in phones" ng-if="phone.brandname === brand"> <label> <input type="checkbox" ng-model="phone.selected">{{phone.modelname}} </label> </div> </div> </div> </div> 

Just add phone.selected = false; 只需添加phone.selected = false; at the end of your forEach and $scope.selectedBrands = []; 在forEach和$scope.selectedBrands = [];的末尾$scope.selectedBrands = []; afterwards. 然后。

https://jsfiddle.net/bbz9pjhc/1/ https://jsfiddle.net/bbz9pjhc/1/

PS: The way you are solving your problem doesn't seem to be "the angular way" to do it, so you might think of reworking it. PS:解决问题的方式似乎并不是解决问题的“角度方法”,因此您可能会考虑对其进行重新设计。 Anyway, hopefully my answer will send you on the right track for your case. 无论如何,希望我的回答能使您走上正确的路。

Just add this line of Code in your checkselectedPhone() method 只需在您的checkselectedPhone()方法中添加此行代码

   for(var i=0;i<$scope.selectedBrands.length;i++)
   {        
         $scope.selectedBrands[i]=false;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM