2013-08-03 14 views
45

Mam taki znacznik zakresu jak poniżej, który wywołuje funkcję w kontrolerze po kliknięciu.Uzyskiwanie atrybutu elementu w funkcji ng-click w angularjs

HTML

<div class="row" ng-repeat="event in events"> 
    <div class="col-lg-1 text-center"> 
     <span class="glyphicon glyphicon-trash" data={{event.id}} ng-click="deleteEvent()"> 
     </span> 
    </div> 
</div> 

Controller

$scope.deleteEvent=function(){ 
    console.log(this); 
} 

Potrzebuję uzyskać wartość w atrybucie danych w funkcji regulatora. Próbowałem użyć tego słowa kluczowego i zdarzenia $; żaden z nich nie działał.

Proszę o pomoc.

Odpowiedz

78

Spróbuj przekazując go bezpośrednio do funkcji ng-click:

<div class="col-lg-1 text-center"> 
    <span class="glyphicon glyphicon-trash" data="{{event.id}}" 
      ng-click="deleteEvent(event.id)"></span> 
</div> 

to powinno być dostępne w danym obsługi:

$scope.deleteEvent=function(idPassedFromNgClick){ 
    console.log(idPassedFromNgClick); 
} 

Oto an example

+0

W rzeczywistości cały ten div pojawia się wewnątrz powtórzenia. Więc nie mogę użyć event.id wewnątrz ng-click. Myślę. – Saravanan

+0

Sprawdź link jsFiddle Właśnie dodałem do mojej odpowiedzi przykład użycia parametru 'ngClick' w' ngRepeat' – jandersen

+0

Wielkie dzięki. Spróbowałem tego wczoraj i spędziłem ponad 3 godziny. To działa. Mogłem popełnić jakiś błąd. W każdym razie teraz działa i dziękuje za skrzypce. Pomogło. – Saravanan

78

Jeszcze bardziej proste, przekazać $event obiekt do ng-click, aby uzyskać dostęp do właściwości wydarzenia. Jako przykład:

<a ng-click="clickEvent($event)" class="exampleClass" id="exampleID" data="exampleData" href="">Click Me</a> 

W ramach swojej funkcji clickEvent() = function(obj) {} można uzyskać dostęp do wartości data tak:

var dataValue = obj.target.attributes.data.value; 

Które wrócą exampleData.

Oto full jsFiddle.

+0

Twoja jsFiddle działa poprawnie w Chrome, ale nie w FireFox? – Michiel

+0

Dzięki za złapanie tego. Udoskonaliłem jsFiddle lepszym rozwiązaniem, używając 'obj.target'. –

+8

Dowiedziałem się, że możesz zrobić "obj.target.getAttribute (" dane ")' wygląda na bardziej czytelny IMO, js fiddle tutaj: http://jsfiddle.net/zpApT/ –

3

Dodawanie do odpowiedzi Brett DeWoody: (która jest aktualizowana teraz)

var dataValue = obj.srcElement.attributes.data.nodeValue; 

działa dobrze w IE (9+) i Chrome, Firefox, ale nie zna własności srcElement. znalazłem:

var dataValue = obj.currentTarget.attributes.data.nodeValue; 

Pracuje w IE, Chrome i FF, nie przetestować Safari.

+1

Dzięki Michiel. Zaktualizowałem jsFiddle, aby rozwiązać ten problem. Używam bardziej uniwersalnego 'obj.Właściwość target do przechwytywania atrybutów. –

+1

Tak, Brett, zgadzam się, że lepiej użyć celu, aktualizować mój kod, dzięki! – Michiel

Powiązane problemy