Passage d'arguments à ngChange cas d'appel à partir de l'intérieur de la directive
J'ai une directive qui accepte un ng-change
attribut:
<radio-buttons options="optionsList"
ng-model="myModel"
ng-change="myCallback($event)"></radio-buttons>
J'ai défini une fonction dans mon contrôleur, myCallback
, qui ressemble à ceci:
$scope.myCallback = function(e) {
console.log("Callback from controller");
console.log(e);
}
La fonction suivante, sélectionnez existe au sein de mon radioButton
directive. J'ai besoin de définir quand le ngChange de rappel est exécutée à l'intérieur de mon directive dans la fonction de sélection:
function select(scope, val) {
if (!scope.disabled && scope.selectedValue != val) {
scope.selectedValue = val;
scope.model = val;
scope.callback.call();
}
}
Le problème que j'ai est l'argument $event
dans myCallback
n'est pas passé quand j'execute myCallback
à l'intérieur de la select
fonction de mon directive.
Violon: http://jsfiddle.net/dkrotts/BtrZH/7/ Mise À Jour: http://jsfiddle.net/dkrotts/BtrZH/8/
Ce que je fais mal?
Contrairement à ngcliquez et ngMouse, ng-modification n'a pas d'offrir un objet d'événement. Que voulez-vous précisément la directive de le faire? Vous pouvez bind() pour événements (comme le changement ou pression de touche) dans votre directive de la fonction de lien pour être informé des changements et des événements.
OriginalL'auteur Dustin | 2013-02-05
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez contrôler quand votre gestionnaire pour le ng-le changement est appelé, je pense que le plus simple serait de supprimer la ng-changer complètement - vous pouvez appeler la fonction de contrôleur directement à partir de votre ng-cliquez sur rappel.
Je pense que cela permet d'atteindre vos fonctionnalités souhaitées:
http://jsfiddle.net/BtrZH/11/
Vous pouvez capturer l'événement objet de la cliquez si nécessaire:
Ensuite, vous pouvez appeler la fonction de contrôleur quand vous le souhaitez:
Je suis d'accord avec @FlavorScape, a dû écrire un gestionnaire personnalisé
Je suis d'accord, mais je pense que ce n'est pas le cas d'utilisation pour ngChange, puisque, techniquement, il est appelé après que la modification est faite, de sorte que vous ne peut pas vraiment gérer l'événement après le fait.
OriginalL'auteur Alex Osborn
Vous devez passer le paramètre dans la fonction de rappel de la sorte:
Et vous devez faire correspondre le nom du paramètre avec celui déclaré dans le HTML
Dans votre cas:
OriginalL'auteur nikolai karadjov
Suivantes ne sont pas bonnes, mais (il faudrait créer une autre variable
$event
et de le transmettre viang-change
):OriginalL'auteur John Doe
Pour transmettre les valeurs de votre contrôleur de l'appeler à l'aide d'un objet avec les touches correspondant au récepteur des arguments tels que définis sur votre modèle.
par exemple
élément
appelant
parent contrôleur récepteur
REF: Passage d'arguments à ngChange cas d'appel à partir de l'intérieur de la directive
OriginalL'auteur Nate Bosscher