it-roy-ru.com

Как программно вызвать ngClick

Я хочу, чтобы вызвать ng-click элемента во время выполнения, как:

_ele.click();

OR

_ele.trigger('click', function());

Как это может быть сделано?

93
mulla.azzi

Синтаксис следующий:

function clickOnUpload() {
  $timeout(function() {
    angular.element('#myselector').triggerHandler('click');
  });
};

// Using Angular Extend
angular.extend($scope, {
  clickOnUpload: clickOnUpload
});

// OR Using scope directly
$scope.clickOnUpload = clickOnUpload;

Больше информации об Angular Extend way здесь .

Если вы используете старые версии angular, вы должны использовать trigger вместо triggerHandler.

Если вам нужно применить остановку распространения, вы можете использовать этот метод следующим образом:

<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
  Something
</a>
173
clopez
angular.element(domElement).triggerHandler('click');

EDIT: Похоже, вам нужно выйти из текущего цикла $ apply (). Один из способов сделать это - использовать $ timeout ():

$timeout(function() {
    angular.element(domElement).triggerHandler('click');
}, 0);

Смотрите скрипку: http://jsfiddle.net/t34z7/

81
Blago

Это следующее решение работает для меня: 

angular.element(document.querySelector('#myselector')).click();

вместо :

angular.element('#myselector').triggerHandler('click');
17
jpmottin

На всякий случай, если все видят это, я добавил дополнительный дублирующий ответ с важной строкой, которая не будет нарушать распространение события

$scope.clickOnUpload = function ($event) {    
    $event.stopPropagation(); // <-- this is important

    $timeout(function() {
        angular.element(domElement).trigger('click');
    }, 0);
};
12
Ulterior

Использование старого доброго JavaScript сработало для меня:
document.querySelector('#elementName').click();

6
charlchad

Вы можете сделать как

$timeout(function() {
   angular.element('#btn2').triggerHandler('click');
});
5
Fizer Khan

Лучшее решение - использовать:

domElement.click()

Потому что события click angularjs triggerHandler (angular.element(domElement).triggerHandler('click')) не всплывают в иерархии DOM, а вышеупомянутая - как обычный щелчок мыши.

https://docs.angularjs.org/api/ng/function/angular.element

http://api.jquery.com/triggerhandler/

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click

4
Morten Holmgaard

Этот код не будет работать (выдает ошибку при нажатии):

$timeout(function() {
   angular.element('#btn2').triggerHandler('click');
});

Вам необходимо использовать querySelector следующим образом:

$timeout(function() {
   angular.element(document.querySelector('#btn2')).triggerHandler('click');
});
0
Guillaume-Alexandre