以编程方式关闭所有 ui-select 下拉列表?

Close all of ui-select drop down list programmatically?

我正在尝试 build 指令使 angular UI $uibModal 可拖动。而且我还想关闭模态主体中所有打开的 ui-select 下拉列表,当模态正在拖动时。

有谁知道如何关闭 $uibModal 中的所有 ui-select 列表?

jsbin https://jsbin.com/lopitopiwa/edit?html,js,output

angular.module('myApp').directive('uibModalDragging',[
    UibModalDragging
]);


function UibModalDragging() {
    return {
        restrict: 'A',
        scope: false,

        link: function (scope, iElem, iAttrs) {
            $(iElem).closest('.modal-content').draggable({
                handler: '.panel-heading',
                start: onStart
            })
        }
    };

    function onStart() {
        //*********************************************
        //close all ui-select ???
    }
}

这是更好的方法,但您需要根据此创建另一个指令:

https://github.com/angular-ui/ui-select/wiki/Accessing-$select

angular.module('myApp').directive('myUiSelect', function() {
  return {
    require: 'uiSelect',
    link: function(scope, element, attrs, $select) {
      scope.$on('closeAll', (ev,val)=>{
        $select.close();
      });
    }
  };
});

然后将其添加到您的元素中:

<ui-select my-ui-select ng-model="selected.value">
                    <ui-select-match>
                        <span ng-bind="$select.selected.name"></span>
                    </ui-select-match>
                    <ui-select-choices repeat="item in myModalCtrl.itemArray">
                        <span ng-bind="item.name"></span>
                    </ui-select-choices>
              </ui-select>

之后只是广播事件以关闭这里的所有示例:

https://jsbin.com/cadekafata/1/edit?html,js,console,output