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



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



_ele.click();


или



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


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

948   8  

8 ответов:

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

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, вы должны использовать триггер вместо triggerHandler.

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

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

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

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

см скрипка:http://jsfiddle.net/t34z7/

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

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

вместо :

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

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

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

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

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

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

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

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

domElement.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

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

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

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

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

Comments

    Ничего не найдено.