Подтвердить что ты не робот

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 для выпадающего меню

4b9b3361

Ответ 1

Повторение элементов опции имеет историю предоставления людям проблем. Обычно я бы сказал вам использовать ng-options для выбора вместо этого, но так как вам нужно использовать некоторые материальные компоненты, это не вариант.

Я знаю, что это не самое подходящее решение, но вы могли бы решить проблему, сохранив копию последнего значения и сравните ее с текущим, как только событие изменения будет запущено. Если это значение не изменилось, то проигнорируйте событие. Это может потребовать дополнительной настройки, поскольку установка layer.Styles, вероятно, просто вызовет множество обновлений.

Так как вы не дали нам плункера, я могу предложить вам поиграть с ng-model-options (который вы уже используете для управления отслеживанием) свойство updateOn и устанавливаете его для чего-то, что не будет вызвано настройкой выбранного свойства. Здесь стоит вспомнить значение blur.