2012-12-11 16 views
6

Możliwe jest przechwycenie bieżącego obiektu zdarzenia w ng-click, np. Procedur obsługi za pomocą właściwości $event.Pobierz bieżący element

Ale czy można uzyskać element, z którego wywołano metodę?

jak na przykład:

<div ng-controller='myController'> 
    <div>{{distortThatDiv($element)}}</div> 
</div> 
+1

Jestem bardzo ciekawy, że dział jesteś zniekształcając ... –

Odpowiedz

3

Z dyrektywy w kanciasty łatwo jest uzyskać dostęp do elementu. Wystarczy użyć łącza funkcję:

angular.module('myModule', [], function ($compileProvider) { 
    $compileProvider.directive('distortThatDiv', function distortThatDivDirective() { 
     return { 
      restrict: 'A', 
      link : function (scope, element, attrs) { 
       element.on('click', function() { 
       // do something 
       }); 
      } 
     }; 
    }); 
}); 

HTML byłoby:

<div ng-controller='myController'> 
    <a distort-that-div>My link</a> 
</div> 
+1

Należy również zauważyć, że jeśli twoja dyrektywa zwraca tylko funkcję, wówczas Angular przyjmie, że jest to funkcja 'link'. –

5

Jeśli masz zamiar manipulować DOM, to naprawdę powinien być za pomocą dyrektywy. Jednakże, jeśli masz $event można get the raw element the event was triggered on łatwo:

$scope.clickHandler = function($event) { 
    var element = $event.target; 
}; 
+0

ale nie używam $ imprezę ... więc nie ma sposobu, aby uzyskać samego elementu? – Agzam

+0

Nie jestem tego świadomy. Jednak ponieważ element jest dołączony do wydarzenia, dlaczego nie użyjesz '$ event'? (Twój przykład używa '$ element', po prostu zmień go na' $ event' i dodaj linię do obsługi kliknięcia). –

2

Oto kolejna alternatywa (nie wiem, czy jest to dobra praktyka, choć):

W szablonie :

<div data-ng-click="foo()">Lorem ipsum</div> 

W kontrolerze:

angular.module('fooApp') 
.controller('FooController', ['$scope', '$window', '$log', function FooController ($scope, $window, $log) { 
    $scope.foo = function foo() { 
     $log.info($window.currentTarget.innerHTML); // Outputs 'Lorem Ipsum'; 
    } 
}]); 
Powiązane problemy