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都要用心去作总结避免下次再犯