J'ai dans ma page .html une liste déroulante,
Menu déroulant:
<select ng-model="blisterPackTemplateSelected" data-ng-options="blisterPackTemplate as blisterPackTemplate.name for blisterPackTemplate in blisterPackTemplates">
<option value="">Select Account</option>
</select>
Je souhaite exécuter une action lorsque l'utilisateur sélectionne une valeur. Donc, dans mon contrôleur, j'ai fait:
Manette:
$scope.$watch('blisterPackTemplateSelected', function() {
alert('changed');
console.log($scope.blisterPackTemplateSelected);
});
Mais la modification de la valeur dans la liste déroulante ne déclenche pas le code: $scope.$watch('blisterPackTemplateSelected', function()
En conséquence, j'ai essayé une autre méthode avec un: ng_change = 'changedValue()'
sur la balise de sélection
et
Fonction:
$scope.changedValue = function() {
console.log($scope.blisterPackTemplateSelected);
}
Mais le blisterPackTemplateSelected
est stocké dans une portée enfant. J'ai lu que le parent ne peut pas accéder à la portée enfant.
Quelle est la bonne / meilleure façon d'exécuter quelque chose lorsqu'une valeur sélectionnée dans une liste déroulante change? Si c'est la méthode 1, qu'est-ce que je fais de mal avec mon code?
la source
Je suis peut-être en retard pour cela mais j'ai eu un peu le même problème.
J'avais besoin de passer l'identifiant et le nom dans mon modèle, mais toutes les solutions orthodoxes m'ont fait créer du code sur le contrôleur pour gérer le changement.
Je m'en suis sorti en utilisant un filtre.
Le "truc" est là:
J'utilise le filtre intégré pour récupérer le nom correct de l'identifiant
Voici un plunkr avec une démo fonctionnelle.
la source
Veuillez utiliser la
ngChange
directive pour cela . Par exemple:Et passez votre nouvelle valeur de modèle dans le contrôleur en tant que paramètre:
la source
La meilleure pratique consiste à créer un objet (utilisez toujours un .dans ng-model)
Dans votre contrôleur:
et dans votre modèle:
Maintenant tu peux juste regarder
ou vous pouvez utiliser la directive ng-change comme ceci:
La vidéo egghead.io "The Dot" a une très bonne vue d'ensemble, tout comme cette question très populaire de débordement de pile: Quelles sont les nuances de l'héritage prototypique / prototypique de portée dans AngularJS?
la source
Vous pouvez passer la valeur ng-model via la fonction ng-change en tant que paramètre:
Il est un peu difficile de connaître votre scénario sans le voir, mais cela devrait fonctionner.
la source
Tu peux faire quelque chose comme ça
au lieu d'ajouter l'option, vous devriez utiliser data-ng-options J'ai utilisé l'option Add à des fins de test
la source
Je suis en retard ici mais j'ai résolu le même genre de problème de cette manière qui est simple et facile.
et la fonction pour ng-change est la suivante;
la source
Vous obtiendrez la valeur et le texte de l'option sélectionnée à partir de la liste / du tableau en utilisant le filtre.
editobj.FlagName = (EmployeeStatus | filter: {Value: editobj.Flag}) [0] .KeyName
la source
J'ai eu le même problème et j'ai trouvé une solution unique. Ce n'est pas la meilleure pratique, mais cela peut s'avérer simple / utile pour quelqu'un. Utilisez simplement jquery sur l'identifiant ou la classe ou votre balise de sélection et vous aurez alors accès au texte et à la valeur de la fonction de modification. Dans mon cas, je passe des valeurs d'options via sails / ejs:
Ensuite, dans mon contrôleur angulaire, ma fonction ng-change ressemble à ceci:
la source
J'ai essayé quelques solutions, mais voici un extrait de production de base. Veuillez faire attention à la sortie de la console lors de l'assurance qualité de cet extrait.
Marquer:
Code:
Explication: le point important ici est le contrôle nul de la valeur modifiée, c'est-à-dire que si la valeur est «indéfinie» ou «nulle», nous devons gérer cette situation.
la source