我正在forloop中填充下拉菜单,并希望基于表达式为每个下拉菜单设置默认值。这似乎是可行的,但我的问题是,当我通过ng-selected设置默认值时,它还会触发不理想的change事件。
我希望只有在下拉列表实际更改的情况下才触发change事件。
<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 Material 进行下拉
最佳答案
重复执行选项元素会给人们带来麻烦。通常,我会告诉您在select上使用ng-options
,但是由于您特别需要使用一些 Material 组件,因此这不是一种选择。
我知道这不是最漂亮的解决方案,但是一旦更改事件被触发,您可以通过保留最后一个值的副本并将其与当前值进行比较来解决该问题。如果该值未更改,则忽略该事件。这可能需要一些额外的调整,因为设置layer.Styles
可能只会触发很多更新。
由于您没有给我们提供小巧的玩法,我只能建议您使用ng-model-options(您已经在使用它来控制跟踪)的updateOn
属性,并将其设置为您不会触发的内容设置选定的属性。这里会想到blur
的值。