Es gibt zwei Möglichkeiten, dieses Problem anzugehen. Verwenden Sie entweder ein einfaches Array oder ein Array von Objekten. Jede Lösung hat ihre Vor- und Nachteile. Unten finden Sie jeweils eine für jeden Fall.
Mit einem einfachen Array als Eingabedaten
Der HTML-Code könnte wie folgt aussehen:
{{fruitName}}
Und der entsprechende Controller-Code wäre:
app.controller('SimpleArrayCtrl', ['$scope', function SimpleArrayCtrl($scope) {
// Früchte
$scope.fruits = ['Apfel', 'Orange', 'Birne', 'Naartjie'];
// Ausgewählte Früchte
$scope.selection = ['Apfel', 'Birne'];
// Auswahl für eine bestimmte Frucht nach Namen umschalten
$scope.toggleSelection = function toggleSelection(fruitName) {
var idx = $scope.selection.indexOf(fruitName);
// Ist aktuell ausgewählt
if (idx > -1) {
$scope.selection.splice(idx, 1);
}
// Ist neu ausgewählt
else {
$scope.selection.push(fruitName);
}
};
}]);
Vorteile: Einfache Datenstruktur und Umschalten nach Namen ist einfach zu handhaben
Nachteile: Hinzufügen/Entfernen ist umständlich, da zwei Listen (die Eingabe und die Auswahl) verwaltet werden müssen
Mit einem Objekt-Array als Eingabedaten
Der HTML-Code könnte wie folgt aussehen:
{{fruit.name}}
Und der entsprechende Controller-Code wäre:
app.controller('ObjectArrayCtrl', ['$scope', 'filterFilter', function ObjectArrayCtrl($scope, filterFilter) {
// Früchte
$scope.fruits = [
{ name: 'Apfel', selected: true },
{ name: 'Orange', selected: false },
{ name: 'Birne', selected: true },
{ name: 'Naartjie', selected: false }
];
// Ausgewählte Früchte
$scope.selection = [];
// Hilfsmethode, um ausgewählte Früchte zu erhalten
$scope.selectedFruits = function selectedFruits() {
return filterFilter($scope.fruits, { selected: true });
};
// Überwache Früchte auf Änderungen
$scope.$watch('fruits|filter:{selected:true}', function (nv) {
$scope.selection = nv.map(function (fruit) {
return fruit.name;
});
}, true);
}]);
Vorteile: Hinzufügen/Entfernen ist sehr einfach
Nachteile: Etwas komplexere Datenstruktur und Umschalten nach Namen ist umständlich oder erfordert eine Hilfsmethode
Demo: http://jsbin.com/ImAqUC/1/