2014-06-23 11 views
9

Ich habe eine Direktive, die Art einer Auswahlbox implementiert.
Jetzt, wenn das Auswahlfeld geöffnet ist und ich irgendwo außerhalb davon (irgendwo anders im Dokument) klicke, muss ich es zusammenbrechen.

Dieser JQuery-Code funktioniert in meiner Richtlinie, aber ich will, es zu tun „der Winkel Weg“:

$(document).bind('click', function (e) { 
     var $clicked = e.target; 
     if (!$clicked.parents().hasClass("myClass")) { 
      scope.colapse(); 
     } 
    }); 

Ich habe versucht, etwas zu tun, den $ Dokument in meine bestehenden Richtlinie mit dem Einspritzen aber nicht gelang.

+0

Könnten Sie bitte jsifddle/Plunker zur Verfügung stellen? – Miraage

+0

Eigentlich schreiben Sie Anweisungen, wenn Sie mit DOM spielen/manipulieren wollen. Ich denke, das Anhängen über den Event-Handler in Ihrer Direktive ist der richtige Weg oder eher die eckige Art, solche Dinge zu tun. –

+0

Können Sie zeigen, wie Sie es gemacht haben und was war der Fehler? – Chandermani

Antwort

17

I, die wahre Angular Art und Weise glauben ist angular.element statt jQuery zu verwenden und den Zugriff auf window.document über den $document Service:

(function() { 

    angular.module('myApp').directive('myDocumentClick', 
    ['$window', '$document', '$log', 
    function($window, $document, $log) { 
     return { 
     restrict: 'A', 
     link: function(scope, element, attrs) { 
      $document.bind('click', function(event) { 
      $log.info(event); 
      if (angular.element(event.target).hasClass('myClass')) { 
       $window.alert('Foo!'); 
      } 
      }) 
     } 
     }; 
    } 
    ]); 

})(); 

Plunker link

+0

Genau das, was ich brauchte. Vielen Dank! –

Verwandte Themen