【问题标题】:Prevent md-select dropdown opening under certain condition when clicked单击时防止在某些条件下打开 md-select 下拉菜单
【发布时间】:2016-07-04 14:18:20
【问题描述】:

我有一个,我试图阻止 md-select 在特定条件下打开,而是显示一个警告对话框。

我可以使用以下命令禁用 md-select

ng-disabled="controller.unsavedChangesMade"

但我宁愿避免这种情况,而是允许用户单击下拉菜单并显示对话框,并且不会打开 md-select 项目列表。如果我删除 ng-disabled,则会显示对话框和项目下拉列表。

<md-input-container>
    <label>Select Item</label>
    <md-select ng-disabled="controller.unsavedChangesMade" ng-model = "selectedItem" ng-click="controller.handleItemChange(selectedItem.name, $event)" aria-label="Selected Item">
        <md-option ng-repeat = "(index,item) in controller.items" ng-value = "item"
                   ng-click = "controller.getItemByCategory(item.name)">
            {{item.name}}
        </md-option>
    </md-select>
</md-input-container>

我已经研究过使用

$event.stoppropagation() 

但我无法阻止下拉列表打开。

我不确定这是否可行,但我们将不胜感激,

谢谢

【问题讨论】:

    标签: javascript angularjs material-design angular-material


    【解决方案1】:

    您可以将 event.stoppropagation()md-on-open 属性一起使用 - CodePen

    <div ng-controller="AppCtrl as ctrl" class="md-padding selectdemoBasicUsage" ng-cloak="" ng-app="MyApp">
      <div>
        <div layout="row">
          <md-input-container>
            <label>State</label>
            <md-select ng-model="ctrl.userState" md-on-open="ctrl.test($event)">
                <md-option ng-repeat="state in ctrl.states" value="{{state.abbrev}}">
                  {{state.abbrev}}
                </md-option>
              </md-select>
          </md-input-container>
        </div>
        <md-button ng-click="ctrl.toggle()">Toggle</md-button>
      </div>
    </div>
    

    JS

    (function () {
      'use strict';
      angular
          .module('MyApp',['ngMaterial', 'ngMessages', 'material.svgAssetsCache'])
          .controller('AppCtrl', function() {
            this.unsavedChangesMade = false;
    
            this.toggle = function () {
              this.unsavedChangesMade = !this.unsavedChangesMade;
            };
    
            this.test = function (event) {
              if (this.unsavedChangesMade) {
                event.stoppropagation();            
              }
            };
    
            this.userState = '';
            this.states = ('AL AK AZ AR').split(' ').map(function (state) { return { abbrev: state }; });
          });
    })();
    

    【讨论】:

    • 太棒了 - 这对我有用 - 非常感谢 camden_kid
    猜你喜欢
    • 2018-02-16
    • 2023-03-23
    • 1970-01-01
    • 2018-04-03
    • 2021-10-09
    • 2021-09-01
    • 2016-05-26
    • 2021-06-14
    • 2016-05-06
    相关资源
    最近更新 更多