2014-06-23 28 views
9

Mam dyrektywę, która implementuje rodzaj pola wyboru.
Teraz, gdy okno wyboru jest otwarte i kliknę gdzieś poza nim (gdziekolwiek indziej w dokumencie), potrzebuję go do zwinięcia.

ten kod jQuery działa w moim dyrektywy, ale chcę to zrobić „kątowa sposób”:

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

Próbowałem robić coś ze wstrzykiwaniem usługę dokument $ do mojego dyrektywy, ale nie udało.

+0

mógłbyś dostarczyć jsifddle/plunker? – Miraage

+0

Właściwie piszesz dyrektywy kiedy chcesz grać z DOM/manipulować. Więc myślę, że dołączenie powyższej procedury obsługi zdarzeń do twojej dyrektywy jest właściwym sposobem, czy raczej Angularnym sposobem robienia takich rzeczy. –

+0

Czy możesz pokazać, jak to zrobiłeś i jaki był błąd? – Chandermani

Odpowiedz

17

wierzę, najbardziej prawdziwe kątowa sposobem jest użycie angular.element zamiast jQuery i dostępu window.document poprzez usługę $document:

(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

Dokładnie to, czego potrzebowałem. Dziękuję Ci! –