javascript - programacion - ng-click function
Cómo activar ngClick mediante programación (7)
Quiero activar ng-click
de un elemento en tiempo de ejecución como:
_ele.click();
O
_ele.trigger(''click'', function());
¿Cómo puede hacerse esto?
El uso de un JavaScript simple funcionaba para mí:
document.querySelector(''#elementName'').click();
La mejor solución es usar:
domElement.click()
Debido a que anglejs triggerHandler ( angular.element(domElement).triggerHandler(''click'')
) haga clic en eventos no aparece en la jerarquía DOM, pero el anterior hace - al igual que un clic normal del mouse.
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
La siguiente solución funciona para mí:
angular.element(document.querySelector(''#myselector'')).click();
en lugar de :
angular.element(''#myselector'').triggerHandler(''click'');
La sintaxis es la siguiente:
function clickOnUpload() {
$timeout(function() {
angular.element(''#myselector'').triggerHandler(''click'');
});
};
// Using Angular Extend
angular.extend($scope, {
clickOnUpload: clickOnUpload
});
// OR Using scope directly
$scope.clickOnUpload = clickOnUpload;
Más información sobre Angular Extender here .
Si está utilizando versiones antiguas de angular , debe usar el disparador en lugar de triggerHandler .
Si necesita aplicar la detención de la propagación, puede usar este método de la siguiente manera:
<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
Something
</a>
Por si acaso todo el mundo lo ve, agregué una respuesta de duplicación adicional con una línea importante que no interrumpirá la propagación del evento.
$scope.clickOnUpload = function ($event) {
$event.stopPropagation(); // <-- this is important
$timeout(function() {
angular.element(domElement).trigger(''click'');
}, 0);
};
Puedes hacer como
$timeout(function() {
angular.element(''#btn2'').triggerHandler(''click'');
});
angular.element(domElement).triggerHandler(''click'');
EDITAR: parece que tiene que salir del ciclo $ apply () actual. Una forma de hacerlo es usar $ timeout ():
$timeout(function() {
angular.element(domElement).triggerHandler(''click'');
}, 0);
Ver violín: jsfiddle.net/t34z7