在md-autocomplete上使用ng-blur?

时间:2016-06-22 04:21:28

标签: javascript angularjs angular-material

我希望在角度材质中构建一个简单的可编辑输入栏,当我点击高亮文本时,它会打开md-autocomplete,如果我点击外部部分,它将关闭{{1并显示文字。

md-autocomplete

Plnkr

<div ng-hide="vm.editableEnabled" ng-click="vm.enableEditorTitle()"> <span class="hight-light">{{vm.group.name}}</span> </div> <md-autocomplete ng-show="vm.editableEnabled" .... .... ng-blur="vm.disableEditorTitle()"> </md-autocomplete> 无法使用ng-blur

我知道这是https://github.com/angular/material/issues/3906中的一个问题。 我已经尝试了指令解决方案,但它不起作用。

有什么其他好的解决方案可以解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:3)

添加了一个名为onClickOutside的指令,当点击外部的嵌套项目时,会触发表达式

此外,请注意直接更改vm.editableEnabled = true/false

您可以在控制器中免除功能

在线演示 - http://plnkr.co/edit/5NlWD2bXFkGPXuj0Awav?p=preview

enter image description here

<div on-click-outside="vm.editableEnabled = false">
  <div ng-hide="vm.editableEnabled" ng-click="vm.editableEnabled = true" ... >
  <md-autocomplete ng-show="vm.editableEnabled" ... >
</div>

的javascript:

.directive('onClickOutside', function($timeout) {
    return {
      restrict: 'A',
      scope: {
        onClickOutside: "&"
      },
      link: function(scope, element, attr) {

        angular.element(document).bind('click', function(event) {
          var isChild = childOf(event.target, element[0]);
          if (!isChild) {
            scope.$apply(scope.onClickOutside);
          }

        });

        function childOf(c, p) {
          while ((c = c.parentNode) && c !== p);
          return !!c;
        }
      }

    };

  });

答案 1 :(得分:0)

您可以使用md-search-text-change属性