Angular: выпадающие меню, запретить ng-selected для запуска ng-change
Я заполняю выпадающие списки в forloop и хочу установить значение по умолчанию для каждого раскрывающегося списка на основе выражения. Это похоже на работу, но моя проблема в том, что когда я устанавливаю значение по умолчанию через ng-selected, он также запускает событие изменения, которое не является идеальным.
Я бы хотел, чтобы событие изменения было запущено только в том случае, если выпадающее меню действительно изменено.
<div layout="row" ng-if="layer.Styles && layer.Styles.length > 1">
<md-input-container class="md-icon-float md-block layer-style">
<md-select ng-change="vm.changeLayerStyle(layer,selectedStyle)" ng-model="selectedStyle" ng-model-options="{trackBy: '$value.Name'}" aria-label="Change Layer Style">
<md-option ng-repeat="style in layer.Styles" ng-value="style" ng-selected="style.IsDefault == true">
{{style.DisplayName}}
</md-option>
</md-select>
</md-input-container>
</div>
Использование материала angular для выпадающего меню
Ответы
Ответ 1
Повторение элементов опции имеет историю предоставления людям проблем. Обычно я бы сказал вам использовать ng-options
для выбора вместо этого, но так как вам нужно использовать некоторые материальные компоненты, это не вариант.
Я знаю, что это не самое подходящее решение, но вы могли бы решить проблему, сохранив копию последнего значения и сравните ее с текущим, как только событие изменения будет запущено. Если это значение не изменилось, то проигнорируйте событие. Это может потребовать дополнительной настройки, поскольку установка layer.Styles
, вероятно, просто вызовет множество обновлений.
Так как вы не дали нам плункера, я могу предложить вам поиграть с ng-model-options (который вы уже используете для управления отслеживанием) свойство updateOn
и устанавливаете его для чего-то, что не будет вызвано настройкой выбранного свойства. Здесь стоит вспомнить значение blur
.