Angularjs ng-click: как получить данные `this`?
Скажем, у меня есть этот элемент в списке с событием angular ng-click
.
<a data-id='102' ng-click='delete()'>Delete</a>
Как я могу получить данные/информацию, если this
затем?
$scope.delete = function() {
var id = $(this).attr('data-id');
console.log(id); // I want to get 102 as the result
if (confirm('Are you sure to delete?')) {
$('#contactsGrid tr[data-id="' + id + '"]').hide('slow');
}
};
Ответы
Ответ 1
Правильное решение будет состоять в том, чтобы передать id в качестве параметра функции удаления, например
<a data-id='102' ng-click='delete(102)'>Delete</a>
затем
$scope.delete = function(id) {
console.log(id); // I want to get 102 as the result
if (confirm('Are you sure to delete?')) {
$('#contactsGrid tr[data-id="' + id + '"]').hide('slow');
}
};
Это не должно быть сделано, но просто чтобы продемонстрировать
Внутри ng-click
вы можете получить событие с помощью $event
, поэтому
<a data-id='102' ng-click='delete($event)'>Delete</a>
затем
$scope.delete = function (e) {
var id = $(e.target).data('id');
console.log(id); // I want to get 102 as the result
};
Демо: Fiddle
Ответ 2
Доступ к атрибутам тегов ссылок с кликами
В jQuery,
<a class='test' data-id='102' ng-click='delete(102)'>Delete</a>
по щелчку выше ссылки обрабатывается как
$('.test').click(function(){
console.log($(this).attr('data-id'));
});
Демо-код для jQuery: fiddle
В Angularjs,
<a class='test' data-id='102' ng-click='delete($event)'>Delete</a>
по щелчку выше ссылки обрабатывается как
$scope.delete = function (e) {
console.log($(e.currentTarget).attr("data-id"));
}
Демо-код для Angularjs: fiddle
Ответ 3
Вы также можете получить доступ к данным события для JQuery в angular, используя:
$scope.myClickedEvent = function(clickEvent) {
$scope.clickEvent = simpleKeys(clickEvent);
angular.element(clickEvent.currentTarget);
console.log(angular.element(clickEvent.currentTarget).text());
/*
* return a copy of an object with only non-object keys
* we need this to avoid circular references
*/
function simpleKeys (original) {
return Object.keys(original).reduce(function (obj, key) {
obj[key] = typeof original[key] === 'object' ? '{ ... }' : original[key];
return obj;
}, {});
}
};
Ваш элемент, который вы нажали, должен содержать ng-click, подобный этому
ng-click="myClickedEvent($event)"
Ответ 4
Если по какой-то другой причине вам все равно нужно получить доступ к элементу здесь, как я это сделал:
<span ng-click="selectText($event)"></span>
и в контроллере
$scope.selectText = function(event) {
var element = event.currentTarget; // returns the span DOM Element
// Now you can access its dataset just like in plain old JS
// In my case it was for selecting the content of a tag on click anywhere on the tag
};