Angular:下拉,防止ng-selected发生变化

Ste*_*ieB 11 angularjs angular-material

我在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>
Run Code Online (Sandbox Code Playgroud)

使用角度材料进行下拉

Per*_*eck 4

重复选项元素历来会给人们带来问题。通常我会告诉您在选择上使用ng-options,但由于您特别需要使用一些材质组件,所以这不是一个选项。

我知道这不是最漂亮的解决方案,但是一旦触发更改事件,您可以通过保留最后一个值的副本并将其与当前值进行比较来解决问题。如果该值未更改,则忽略该事件。这可能需要一些额外的调整,因为设置layer.Styles可能只会触发大量更新。

由于您没有给我们一个可以玩的插件,我只能建议您使用ng-model-options(您已经在使用它来控制跟踪)updateOn属性并将其设置为不会出现的内容由您设置所选属性触发。blur这里就想到了价值。