Теперь в моих записях:
14.3, 14.2 и 14.1 принадлежит части с Id = 30.
Я пытаюсь достичь ниже:
1). По умолчанию будут выбраны первые 2 идентификатора. Теперь, если пользователь попытается выбрать id = 71, который принадлежит части 30, тогда пользователю не разрешается выбирать id = 71, потому что более высокая версия часть 30 уже выбрана, т.е. id = 76.
2) Теперь, если пользователь снимет отметку id = 77 (33), пользователю будет разрешено проверять id = 71, потому что теперь нет отдельной части, поэтому пользователь должен разрешить проверять всю часть с помощью id = 30, но как только пользователь выбирает другую часть, нижняя часть должна быть снижена.
Проблема с моим кодом:
1) Когда я сниму отметку 16.1 и попытаюсь проверить 14.2, тогда мне не разрешено ее проверять. Я должен разрешить проверять 14.2, так как теперь здесь нет разных частей.
2) 16.1 и 14.3 проверяются по умолчанию. Теперь, когда я проверяю 15.1, а затем снова проверяю 14.1, тогда 14.3 снимет флажок, который является неправильным, поскольку 14.3 является самым высоким среди идентификатора части = 30, поэтому я не могу проверить 14.1.
var app = angular.module('myApp', []);
app.controller('myCtrl', function ($scope) {
$scope.myArray = [
{
"id": 77,
"selected": true,
"part": 33,
"name": "16.1",
},
{
"id": 76,
"part": 30,
"selected": true,
"name": "14.3",
},
{
"id": 71,
"part": 30,
"selected": false,
"name": "14.2",
},
{
"id": 70,
"part": 31,
"selected": false,
"name": "15.1",
},
{
"id": 69,
"part": 30,
"selected": false,
"name": "14.1",
},
{
"id": 68,
"part": 29,
"selected": false,
"name": "13.1",
},
{
"id": 55,
"part": 26,
"selected": false,
"name": "12.1",
}
,
{
"id": 54,
"part": 25,
"selected": false,
"name": "11.2",
}
,
{
"id": 53,
"part": 25,
"selected": false,
"name": "11.1",
}
];
$scope.checkItem = function (item) {
if (item.selected) {
var index = $scope.myArray.map(m=>m.id).indexOf(item.id);
var previousPart = {};
for (var i = index - 1; i >= 0; i--) {
if ($scope.myArray[i].selected) {
previousPart = $scope.myArray[i];
break;
}
}
if (item.part != previousPart.part) {
for (var i = 0; i < $scope.myArray.length; i++) {
if (($scope.myArray[i].part == item.part && $scope.myArray[i].part != item.part)
&& $scope.myArray[i].selected) {
$scope.myArray[i].selected = false;
break;
}
}
}
else
item.selected = false;
}
};
});
<!DOCTYPE html>
<html ng-app="myApp" ng-controller="myCtrl">
<head>
<title></title>
<meta charset="utf-8" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
</head>
<body>
<div ng-repeat="item in myArray">
<input ng-model="item.selected" ng-click="checkItem(item)" type="checkbox" />{{ item.name }}
</div>
</body>
</html>