2017-07-07 2 views
1

Ich versuche, eine Dropdown-ListeWie können Sie andere Gruppen deaktivieren, wenn Sie eine Option einer Gruppe in md-select auswählen?

<md-select> 

und

<md-optgroup>. 

Ich bin nach dem Vorbild „Optionsgruppen“ hier mit zu implementieren: https://material.angularjs.org/latest/demo/select

Aber was zu implementieren ich will, ist ein bisschen komplex. Sobald der Benutzer eine Option unter einer Gruppe auswählt, sind alle Optionen in den anderen Gruppen grau (kann nicht ausgewählt werden). Nur die Optionen in derselben Gruppe sind weiterhin wählbar.

Zum Beispiel, wenn der Benutzer zuerst "Speck" für die Beläge wählt, dann sind nur noch "Pepperoni", "Wurst", "Hackfleisch" wählbar. Andere Optionen unter VEGGIES sind alle deaktiviert. Wenn der Benutzer "Bacon" nicht abwählt, werden alle Optionen unter VEGGIES wieder verfügbar.

Hat jemand eine Lösung dafür? Danke.

Antwort

1

Sie können ein Element durch ng-deaktiviert deaktivieren. Sie sollten dies erreichen, indem Sie alle Elemente deaktivieren, die nicht die gleiche Kategorie wie die bereits ausgewählte haben.

$scope.toppings = [ 
    { category: 'meat', name: 'Pepperoni' }, 
    { category: 'meat', name: 'Sausage' }, 
    { category: 'meat', name: 'Ground Beef' }, 
    { category: 'meat', name: 'Bacon' }, 
    { category: 'veg', name: 'Mushrooms' }, 
    { category: 'veg', name: 'Onion' }, 
    { category: 'veg', name: 'Green Pepper' }, 
    { category: 'veg', name: 'Green Olives' } 
]; 
$scope.selectedToppings = []; 
$scope.isDisabled = function(item) { 
    return $scope.selectedToppings.length && (item.category !== $scope.selectedToppings[0].category); 
}; 

und Ihre html:

<md-option ng-disabled="isDisabled(topping)" ng-value="topping" ng-repeat="topping in toppings | filter: {category: 'meat' }">{{topping.name}}</md-option> 
+0

Danke. Deine Idee funktioniert. Aber die Codes sind nicht ganz korrekt. Einige Änderungen: ng-value = "topping", ansonsten selectedToppings.category ist nicht definiert. Sie müssen sich auch mit dem Fall beschäftigen, wenn selectToppings.length == 0 separat ausgewählt ist. Anderenfalls werden die deaktivierten Optionen nicht wieder verfügbar, wenn Sie alle ausgewählten Optionen abgewählt haben. – user3293338

+0

Übrigens ist es möglich, ein Feature hinzuzufügen, dass der Gruppenname auch ausgewählt werden kann? Wenn Sie den Gruppennamen auswählen, werden alle Optionen in der Gruppe ausgewählt und Optionen in anderen Gruppen werden deaktiviert. Vielen Dank. – user3293338

+0

hast du recht beim ng-value = "topping". Über die selectedToppings.length == 0 ist das nicht nötig. Über die Funktion denke ich nicht, dass es möglich ist, aber Sie können eine weitere benutzerdefinierte Option hinzufügen, um alle auszuwählen, vor jeder Optionsschleife. – Fetrarij

Verwandte Themen