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