如何以编程方式触发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>