2016-06-22 5 views
5

Ich möchte eine einfache bearbeitbare Input-bar in eckigen Material zu bauen, wenn ich den high-light Text klicken, wird es geöffnet md-autocomplete, und wenn ich außerhalb Teil klicken, wird es schließen md-autocomplete und den Text anzeigen.Verwenden Sie ng-Blur auf 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

Aber die ng-blur funktioniert nicht in md-autocomplete.

Ich weiß, das ist ein Problem in https://github.com/angular/material/issues/3906. Ich habe versucht, die Richtlinie Lösung, aber es funktioniert nicht.

Gibt es da noch eine andere gute Lösung, um das zu lösen?

Dank

+0

dies sehen https://github.com/angular/material/issues/3906 und https://github.com/angular/ Material/Probleme/3357 –

+0

Ich habe versucht, die Richtlinie Lösung, aber es funktioniert nicht. – max247

+0

Ich schlage vor, wenn md-blur in md-autocomplete nicht funktioniert und Ihr div-Element, das md-autocomplete enthält, genug isoliert ist. Versuchen Sie, die Methode "vm.disableEditorTitle()" beim Klick auf divs Körper zu binden. –

Antwort

3

Added eine RichtlinieonClickOutside genannt, wird es einen Ausdruck auslösen wenn ein außerhalb seiner verschachtelten Elemente geklickt.

Darüber hinaus beachten Sie, dass Sie die Funktionen in Ihrem Controller vm.editableEnabled = true/false


Online-Demo von direkt Wechsel erübrigen können - 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; 
     } 
     } 

    }; 

    }); 
+0

Große Lösung! Vielen Dank! – max247

0

Sie verwenden CNA die md-search-Text-Änderung Attribut