Je génère un tas de boutons radio en utilisant ng-repeat, puis j'essaie de mettre à jour un modèle lorsque l'un d'eux est sélectionné. Cela ne semble pas fonctionner.
Le même balisage fonctionne très bien lorsque les entrées radio sont codées en dur au lieu d'être générées par ng-repeat.
Cela marche:
<input type="radio" ng-model="lunch" value="chicken" name="lunch">
<input type="radio" ng-model="lunch" value="beef" name="lunch">
<input type="radio" ng-model="lunch" value="fish" name="lunch">
{{lunch}}
Cela ne veut pas:
<input type="radio" ng-model="lunch" ng-repeat="m in meat" value="m" name="lunch">
{{lunch}}
Voir jsfiddle montrant les deux ici: http://jsfiddle.net/mark_up/A2qCS/1/
Toute aide serait appréciée.
Merci
<div ng-controller="DynamicCtrl">
<input type="radio" ng-model="$parent.lunch" ng-repeat="m in meat"
ng-value="m" name="lunch">
{{lunch}}
</div>
Devrait faire l'affaire.
Si je comprends bien, ng-repeat
crée son propre $scope
. vous devez donc vous référer au $parent $scope;
Oui, AngularJS est délicat. Vous devez également changer le value
en ng-value
aussi.
la question ci-dessus a été discutée ici
Cela se produit car ng-repeat crée une nouvelle portée. Fondamentalement, chaque <input>
crée une valeur selectedOption sur sa propre portée interne. Pour contourner cela, créez un nouvel objet conteneur pour cette valeur. Par exemple, vous pouvez déclarer dans votre contrôleur:
$scope.data = {selectedOption: x};
Et puis dans votre modèle, utilisez ng-model="data.selectedOption"
de cette façon, ng-model est mis à jour .. :)
c'est délicat
Il suffit de remplacer la valeur par la valeur ng