如何以编程方式触发ngClick

我想要在运行时触发ng-click元素,如下所示:

 _ele.click(); 

要么

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

如何才能做到这一点?

语法如下:

 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的信息在这里扩展。

如果您使用旧版本的angular度 ,您应该使用触发器而不是triggerHandler

如果您需要应用停止传播,则可以使用以下方法:

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

编辑:看来,你必须摆脱当前$ apply()周期。 一种方法是使用$ timeout():

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

看小提琴: http : //jsfiddle.net/t34z7/

以下解决scheme适用于我:

 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); }; 

你可以这样做

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

最好的解决scheme是使用:

 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

使用普通的旧JavaScript为我工作:
document.querySelector('#elementName').click();

我认为最好避免“点击”元素。 相反,人们应该尝试改变基本数据(ng模型),这个数据(几乎总是)被元素监视。

一个checkbox的例子:

 var app = angular.module('myApp', []); app.controller('myController', function($scope) { $scope.toggle = function() { $scope.myCheckboxValue = !$scope.myCheckboxValue; }; }); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app='myApp' ng-controller='myController'> <input type="checkbox" ng-model="myCheckboxValue" /> <button ng-click="toggle()">Toggle</button> </div>