Jetzt in meinen Aufzeichnungen:Versuch, Array des Objekts zu manipulieren
14.3, 14.2 und 14.1 gehört zum Teil mit Id = 30.
Ich versuche, unten zu erreichen:
1) standardmäßig zunächst 2-IDs werden selected.Now wenn Benutzer versuchen id = 71 zu wählen, die 30 zu einem Teil gehört, dann sollten Benutzer nicht erlaubt werden, Wählen Sie id = 71, da die höhere Version von Teil 30 bereits ausgewählt ist, dh id = 76.
2) Jetzt wenn Benutzer deaktivieren ID = 77 (33) dann sollte Benutzer ID = 71 überprüfen dürfen, da jetzt kein anderes Teil ausgewählt ist, so sollte Benutzer erlaubt sein, alle Teil mit ID = 30 aber zu überprüfen Sobald der Benutzer ein anderes Teil auswählt, sollte der untere Teil deaktiviert werden.
Problem mit meinem Code:
1) Wenn ich 16.1 deaktivieren und versuchen, 14.2 zu überprüfen, dann bin ich nicht zu überprüfen, es erlaubt. Ich sollte erlauben, 14.2 zu überprüfen, da es jetzt keine anderen Teile gibt.
2) 16.1 und 14.3 sind standardmäßig aktiviert. Wenn ich jetzt 15.1 überprüfe und dann noch einmal 14.1 überprüfe, dann wird 14.3 unchecked, was falsch ist, da 14.3 unter Teil ID = 30 am höchsten ist, also sollte ich nicht in der Lage sein, 14.1 zu überprüfen.
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>
diese Arbeit in einem plunkr bekommen, und ich nehme einen Blick. –