Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度:下拉列表,防止选择ng以触发ng更改_Angularjs_Angular Material - Fatal编程技术网

Angularjs 角度:下拉列表,防止选择ng以触发ng更改

Angularjs 角度:下拉列表,防止选择ng以触发ng更改,angularjs,angular-material,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-bloc

我正在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>

{{style.DisplayName}

在下拉列表中使用角度材质重复选项元素会给人带来麻烦。通常,我会告诉您在select上使用
ng选项
,但由于您特别需要使用某些材质组件,因此这不是一个选项

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


既然您没有给我们一个plunker来玩,我只能建议您使用
updateOn
属性(您已经在使用它来控制track by),并将其设置为您设置所选属性时不会触发的内容。这里会想到值
blur

尝试使用ngModel设置值是的,我有点同意您的第一个选项,在ng更改时调用的函数中,如果(serviceLayer.Style==Style.Name)返回,我会执行类似的操作;这就是我想要的。我很乐意在中继器中控制它,但是哦,好吧