【问题标题】:How can i open angular md-autocomplete programmatically?如何以编程方式打开角度 md-autocomplete?
【发布时间】:2016-07-29 21:04:03
【问题描述】:

我需要在特定事件上打开 angular material md-autocomplete 下拉列表。有没有办法做到这一点?

我有 md-autocomplete,其基本设置类似于 http://codepen.io/paucaverba/pen/GpogPv?editors=101

<div ng-controller="DemoCtrl as ctrl" layout="column" class="autocompletedemoBasicUsage" ng-app="MyApp">

  <md-autocomplete md-selected-item="ctrl.selectedItem" md-search-text="ctrl.searchText" md-items="item in ctrl.querySearch(ctrl.searchText)" md-item-text="item.display" md-min-length="0" placeholder="What is your favorite US state?">
    <md-item-template>
      <span md-highlight-text="ctrl.searchText" md-highlight-flags="^i">{{item.display}}</span>
    </md-item-template>
    <md-not-found>
      No matches found for "{{ctrl.searchText}}".
    </md-not-found>
  </md-autocomplete>
  <br>
        <button class="md-button md-raised"> open </button>
</form>

如果我单击控件本身,它将打开下拉列表。当我点击“打开”按钮时,我想要同样的行为

【问题讨论】:

  • 您能提供更多信息吗?例如,您的代码可能会有所帮助。
  • 感谢您的回答,我已经添加了代码示例

标签: angularjs angular-material md-autocomplete


【解决方案1】:

id="auto_complete_id" 属性赋予您的md-autocomplete

您可以尝试这样的事情:(经过测试。这应该可以工作。但这在 codepen 上不起作用,它会在控制台中引发错误)

codepen 控制台错误(Looking up elements via selectors is not supported by jqLite!)

在本机浏览器上测试。

HTML:

<button  ng-click=openAutocomplete()> Open </button>

JS:

$scope.openAutocomplete=function(){
   setTimeout(function(){
       angular.element('#auto_complete_id').find('input').focus();
   },0);
}

【讨论】:

  • @Alex 很抱歉知道这一点。是关注输入框还是不关注?
  • @Alex 我已经更新了代码。我在我的应用程序中使用相同的逻辑。有用。也应该为你工作。如果没有,请尝试更新您的库。
  • 这对我有用,如果我之前还没有关注输入。如果我单击输入,单击它,然后运行此代码,它不起作用。如果我只运行这段代码,它就可以工作。知道为什么吗?
【解决方案2】:

对 autocompleteDirective 和 autocomepleteController 进行简单修改以公开指令属性,例如 md-focusmd-blur 将允许消费者控制器对这些事件进行操作

【讨论】:

    【解决方案3】:

    我知道这是一个迟到的答案,但如果有人应该找到这个答案,上面的问题主要是选择元素之一。

    在当前示例中(在问题的 CodePen 中给出),如果

    angular.element('#testId').focus();
    

    改为

    document.querySelector('#testId').focus();
    

    甚至

    document.getElementById('testId').focus();
    

    这是由于 jqLit​​e 的限制,并且(在我看来)关于基于 jQuery 样式选择器的查找的假设是可用的,而不是在适当的时候使用正确的方法。

    【讨论】:

      【解决方案4】:

      您可以通过将按钮点击代码更改为来实现您的目标

      var elem = angular.element( document.querySelector( '#testId' ) );
      elem.focus();
      

      最小且直接的目的。

      问候

      【讨论】:

        猜你喜欢
        • 2021-07-22
        • 2022-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多