Avec angularjs, comment puis-je déclencher un clic, ou est-il un meilleur moyen?
Je suis de la création d'un assistant de création de formulaire avec AngularJS.
Pense de chaque fieldset comme suit:
<div ng-controller="MyController as fs">
<fieldset>
...
<button ng-click="fs.StepForward($event)">Next</button>
</fieldset>
<fieldset>
...
<button ng-click="fs.StepBackward($event)">Previous</button>
<button ng-click="fs.StepForward($event)">Next</button>
</fieldset>
</div>
Ce que j'ai fait est, à mon contrôleur a estimé que les fieldset et le prochain jeu de champs comme suit:
app.controller("MyController", function() {
var ft = this;
ft.StepForward = function(event) {
//It's here that I need to find the fieldset
ft.current_fs = event.currentTarget.parentNode;
ft.next_fs = event.currentTarget.parentNode.nextElementSibling;
}
});
Alors d'abord, je ne suis pas sûr si ce est la meilleure manière absolue pour le faire, mais il fonctionne.
Vers le bas à ma principale question... à l'Intérieur de l'une des balises html fieldsets j'ai quelques li éléments, et si certains éléments sont cliqués, je veux déclencher un clic sur le bouton SUIVANT automatiquement.
J'ai essayé d'ajouter un ng-cliquez sur:
<fieldset>
<ul>
<li><a ng-click="fs.TriggerClick($event)">Some Itme</a></li>
</ul>
<button id="MyButtonTest" ng-click="fs.StepForward($event)">Next</button>
</fieldset>
app.controller("MyController", function() {
var ft = this;
ft.StepForward = function(event) {
//It's here that I need to find the fieldset
ft.current_fs = event.currentTarget.parentNode;
ft.next_fs = event.currentTarget.parentNode.nextElementSibling;
}
ft.TriggerClick = function(event) {
angular.element('#MyButtonTest').trigger('click');
}
});
Mais lorsque j'ai créé une fonction pour déclencher un clic sur le bouton, j'ai obtenu l'erreur:
Error: $rootScope:inprog Action Already In Progress
Je suis donc en voulant toucher à jQuery, mais je suis sûr qu'il ya une angulaire moyen de le faire.
fs.TriggerClick
fonction de votre contrôleur?Je l'ai enlevé après avoir fait d'erreur, mais ça va être de retour dans mon exemple en 10 secondes environ, après ce commentaire 🙂
J'ai trouvé des réponses à certaines questions liées à l'erreur "inprog" mais qui m'a conduit à la question de savoir si je dois être la manipulation choses différemment.
OriginalL'auteur user1447679 | 2015-04-27
Vous devez vous connecter pour publier un commentaire.
Vous devez sortir de l'actuelle $apply() cycle. Une façon de faire cela est d'utiliser $timeout() (Voir pourquoi)
Essayez ceci:
Contrôleur
Qui fonctionne, et j'ai trouvé cette solution dans les réponses à cette erreur. Je pense que mon raccrochage est, est-ce vraiment la meilleure façon de le gérer? Il a un sentiment d' (hacky) pour moi, non pas que c'est... veux Juste être sûr que je suis en train de faire les choses.
à l'aide de $de l'événement.stopPropagation(); au lieu de $timeout œuvres ?
Il n'a pas, mais aller de l'avant avec l'aide angulaire de dollars setTimeout que j'apprends. Merci pour votre aide 🙂
Découvert il semble être la solution Angulaire stackoverflow.com/a/18996042/2988788
OriginalL'auteur jbigman