5

我需要在特定事件上打开角度材料 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>

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

4

4 回答 4

1

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

于 2016-07-29T13:04:03.680 回答
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);
}
于 2015-09-14T04:49:57.373 回答
0

您可以通过将按钮单击代码更改为

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

最小且直接达到目的。

问候

于 2016-06-15T05:40:33.177 回答
0

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

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

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

改为

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

甚至

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

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

于 2015-11-05T09:56:40.743 回答