【问题标题】:Use ng-blur on md-autocomplete?在 md-autocomplete 上使用 ng-blur?
【发布时间】:2016-06-22 04:21:28
【问题描述】:

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

<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>

Plnkr

但是ng-blurmd-autocomplete 中不起作用。

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

还有其他好的解决方案吗?

谢谢

【问题讨论】:

标签: javascript angularjs angular-material


【解决方案1】:

添加了一个名为onClickOutside 的指令,当他在其嵌套项的外部单击 时,它将触发一个表达式

另外,请注意您可以通过直接更改vm.editableEnabled = true/false

来节省控制器中的功能

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

<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;
        }
      }

    };

  });

【讨论】:

  • 很好的解决方案!非常感谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 2017-08-11
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多