2015-02-02 4 views
0

Есть ли в AngularJS хороший способ, чтобы можно было скрыть выбранное значение из первого выбора выбора во втором?Два выбора выбора, которые не показывают выбранное значение в другом

Если я выбираю другое значение в первом, необходимо снова увидеть его во втором.

Я написал что-то с чистым javascript, который работает, но это похоже на волшебный код, который вы никогда не хотите трогать.

Благодарим за помощь.

+1

любой код/​​plunker поможет, это немного расплывчатым, что вы хотите достичь – maurycy

+0

Может ngShow/ngHide (https: // документы. angularjs.org/api/ng/directive/ngShow) являются директивами, которые вы хотите? Трудно сказать по вашему вопросу. –

ответ

1

Вам просто нужно добавить фильтр ко второму <select>. Синтаксис отрицательного фильтра заключается в следующем:

items | filter: "!somevalue"

или

items | filter: "!" + var

для var переменной, содержащей отфильтрованы строку.

Таким образом, полное решение выглядит так:

<select ng-model="select1" 
     ng-options = "item for item in items" ng-change="select2 = undefined"> 
    <option value="">select 1</option>  
</select> 

<select ng-model="select2" 
     ng-options = "item for item in items | filter: '!' + select1"> 
    <option value="">select 2</option> 
</select> 

plunker

EDIT:

Если порядок выбора не имеет значения, то можно отфильтровать следующим образом:

<select ng-model="select1" ng-options="item for item in items | filter: filter1" 
     ng-change="filter2 = select1 ? '!' + select1 : undefined"> 
    <option value="">select 1</option> 
</select> 

<select ng-model="select2" ng-options="item for item in items | filter: filter2" 
     ng-change="filter1 = select2 ? '!' + select2 : undefined"> 
    <option value="">select 2</option> 
</select> 

(когда выражение фильтра undefined фильтр не применяется)

plunker 2

+0

это почти то, что я имел в виду, возможно ли это в вашем примере plunker, что в начале, когда загружаются две загрузки select, чтобы я мог выбрать, хочу ли я начать с select1 или select2? – user2244925

+0

@ user2244925, я обновил свой ответ, включив этот случай –

+0

@ user2244925, ответил ли мой ответ на ваш вопрос? –