Comment obtenir l'élément DOM qui a déclenché ng-change?
Je suis en utilisant angularJS. J'ai un peu de <select>
éléments sur ma page, chacune avec sa propre ng-change
par exemple:
<select id="hairColorComponent" ng-model="hairColor"
ng-options="option.name for option in hairColorData"
ng-change="updateUserData()">
Je veux être en mesure de déterminer quel élément du DOM s'est mis à jour à partir de l'intérieur de la updateUserData
fonction, sans avoir à spécifier manuellement comme paramètre pour chaque ng-change
attribut.
Est-il un event
ou caller
ou quelque chose de similaire que je peux utiliser dans le cadre de updateUserData
?
Espérons que quelque chose comme ng-change="updateUserData(caller)"
source d'informationauteur OpherV
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de moyen (facile) pour ce faire, de par leur conception. Angulaire contrôleurs sont censés être complètement séparée de la DOM, donc si vous vous trouvez avoir besoin de référencer les DOM en eux, vous êtes probablement approcher les choses de la mauvaise façon.
Si votre code HTML est
Ensuite de changer le sélectionnez modifier la valeur de
$scope.hairColor
dans votre contrôleur. DansupdateUserData()
viens de lire sa valeur et d'agir en conséquence.Si dans votre situation il n'y a vraiment aucun moyen de le faire, sauf le référencement du DOM, vous pourriez le faire par écrit une coutume de la directive. En général, direct de manipulation du DOM Angulaire devrait être un dernier recours type de mesure.
Trouvé ceci sur google, j'ai finalement résolu mon problème donc voici ma solution.
Si vous avez juste besoin de l'ID, vous pouvez toujours juste passer que comme un paramètre.
Toujours pas super propre, mais il a résolu mon problème. Depuis que j'ai réellement besoin de l'élément du dom, j'ai ensuite utilisé jQuery pour récupérer l'élément.
(Pour ceux qui se demandent, je fais de mon mieux avec la conversion de code ancien, qui "comme par magie" enregistre les paramètres de l'utilisateur sur les pages de tous sur le site web).