22°

cheked复选框返回值的时候选中

html

<div ng-repeat="item in businessType">
		<input type="checkbox" ng-class="{namecheck: item.name=='null'}" ng-model="item.checked" ng-change="selectOne()">

</div>

js

  1.单选选中的时候
	$scope.checkedList = []
	$scope.selectOne = function () {
    	console.log($scope.businessType)
    	angular.forEach($scope.businessType , function (i) {
      	console.log(i.checked)
      	var index = $scope.checkedList.indexOf(i.code);
      	if(i.checked && index === -1) {
        	$scope.checkedList.push(i.code);
      	} else if (!i.checked && index !== -1){
        	$scope.checkedList.splice(index, 1);
      	};
    	})
    	console.log($scope.checkedList);
  	}
  2.ajax返回数据的时候
  	for(let i = 0;i < data.data[0].businessTypes.length;i++){//这一层循环是接口返回的数据
       $scope.checkedList.push(data.data[0].businessTypes[i].code)//如果有code的时候就把code压入数组中
       for(let k = 0;k < $scope.businessType.length;k++){//这一层循环是原始数据
       if($scope.businessType[k].code === data.data[0].businessTypes[i].code){//让原始数据与返回数据的code做对比如果相等就是选中的状态
            $scope.businessType[k].checked = true;
             break;
        }
      }
  	}

总结

	刚开始做的时候我是用原始数据做外层循环的结果只有选中数组的最后一个是选中的状态,后来找到原因是因为外层循环的数据比内层循环的数据多,如果选中的只有2个,外层循环5个,外层循环能循环5次内层循环只能循环2次,所以多的3个还会和他做对比又会重新赋值。因此需要返回的数据放在外层和原始数据做对比,他有2个循环2此和原始数据一次做对比,所以这样就好啦
	每一次遇到的bug都要用心去做总结避免下次再犯

本文由【潇潇程序缘】发布于开源中国,原文链接:https://my.oschina.net/pingheyongfeng/blog/3059031

全部评论: 0

    我有话说: