2017-07-07 10 views
1

私はmd-selectで1つのグループのオプションを選択すると、他のグループを選択不可にするにはどうすればいいですか?

<md-select> 

<md-optgroup>. 

を使用して、ドロップダウンリストを実装しようとしています、私はここに例の「オプショングループ」を以下の午前:https://material.angularjs.org/latest/demo/select

しかし、私は実装したいです少し複雑です。ユーザーがグループの下でオプションを選択すると、他のグループのすべてのオプションはグレー(選択できません)になります。同じグループのオプションだけが選択可能です。

たとえば、ユーザーがトッピングを最初に選択した場合、「Pepperoni」、「Sausage」、「Ground Beef」のみが選択可能です。 VEGGIESの他のオプションはすべて無効になっています。ユーザーが「Bacon」の選択を解除しない限り、VEGGIESのすべてのオプションが再び使用可能になります。

誰にでも解決策がありますか? ありがとうございます。

答えて

1

ng-disabledによってアイテムを無効にすることができます。 これは、すでに選択されているものと同じカテゴリを持たないすべてのアイテムを無効にすることによって達成する必要があります。

$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); 
}; 

とあなたのhtml:

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

ありがとうございました。あなたのアイデアは機能します。しかし、コードは完全に正しいわけではありません。いくつかの編集:ng-value = "topping"、そうでなければselectedToppings.categoryは未定義です。 selectedToppings.length == 0を別々に扱う必要もあります。選択したすべてのオプションの選択を解除すると、無効なオプションは再び利用できなくなります。 – user3293338

+0

ところで、グループ名も選択できるという特徴を追加することは可能ですか?グループ名を選択すると、そのグループのすべてのオプションが選択され、他のグループのオプションは無効になります。ありがとうございました。 – user3293338

+0

あなたはng-value = "topping"の権利を持っています。 selectedToppings.length == 0について別々にする必要はありません。この機能については、それは可能ではないと思いますが、すべてのオプションループの前に、別のカスタムオプションを追加してすべてを選択することもできます。 – Fetrarij

関連する問題