J'ai un modèle qui revient dans l'objet storeLocations avec une valeur isDefault. Si isDefault renvoie la valeur true, je ne définirai pas ce bouton radio du groupe comme coché.
Je ne sais pas si j'ai besoin de faire un $ each (données, fonction (index, valeur) et de parcourir chaque objet renvoyé ou s'il existe un moyen plus simple de le faire en utilisant les constructions angular.
Objet:
storeLocations = [
{
... more values,
isDefault: true
}
]
Balisage:
<tr ng-repeat="location in merchant.storeLocations">
<td>{{location.name}}</td>
<td>{{location.address.address1}}</td>
<td>{{location.address.address2}}</td>
<td>{{location.address.city}}</td>
<td>{{location.address.stateProvince}}</td>
<td>{{location.address.postalCode}}</td>
<td>{{location.address.country}}</td>
<td>{{location.website}}</td>
<td>{{location.zone}}</td>
<td><input type="radio" ng-model="location.isDefault" value="{{location.isDefault}}" name="isDefault_group"></td>
Utilisez ng-value
au lieu de value
.
ng-value="true"
La version avec ng-checked
est pire à cause de la duplication du code.
Si vous avez un groupe de boutons radio et que vous voulez que le bouton radio soit coché en fonction du modèle, le bouton radio qui a les mêmes propriétés value
et ng-model
est automatiquement coché.
<input type="radio" value="1" ng-model="myRating" name="rating" class="radio">
<input type="radio" value="2" ng-model="myRating" name="rating" class="radio">
<input type="radio" value="3" ng-model="myRating" name="rating" class="radio">
<input type="radio" value="4" ng-model="myRating" name="rating" class="radio">
Si la valeur de myRating
est "2", le deuxième bouton radio est sélectionné.
Une façon pour moi de voir plus puissant et d’éviter d’avoir un isDefault
dans tous les modèles est d’utiliser les attributs ng ng-model
, ng-value
et ng-checked
.
ng-model : lie la valeur à votre modèle.
ng-value : valeur à transmettre à la liaison _ng-model
_.
ng-vérifié : valeur ou expression évaluée. Utile pour les boutons radio et les cases à cocher.
Exemple d'utilisation: Dans l'exemple suivant, j'ai mon modèle et une liste des langues prises en charge par mon site. Pour afficher les différentes langues prises en charge et mettre à jour le modèle avec la langue de sélection, nous pouvons le faire de cette manière.
_<!-- Radio -->
<div ng-repeat="language in languages">
<div>
<label>
<input ng-model="site.lang"
ng-value="language"
ng-checked="(site.lang == language)"
name="localizationOptions"
type="radio">
<span> {{language}} </span>
</label>
</div>
</div>
<!-- end of Radio -->
_
Notre modèle _site.lang
_ obtiendra une valeur language
chaque fois que l'expression en cours d'évaluation _(site.lang == language)
_ est vraie. Cela vous permettra de le synchroniser facilement avec le serveur puisque votre modèle a déjà changé.
J'ai fini par utiliser l'attribut angular intégré ng-checked="model"
Comme discuté un peu dans les commentaires de la question, voici une façon de le faire:
<input ... ng-model="$parent.storeDefault" value="{{location.id}}">
Ce qui précède suppose que chaque emplacement a un champ (par exemple, id) qui contient une valeur unique.
Notez que $ parent.storeDefault est utilisé car ng-repeat crée une portée enfant et nous souhaitons manipuler le paramètre storeDefault sur la portée parent.
violon .
Faites juste quelque chose comme ça, <input type="radio" ng-disabled="loading" name="dateRange" ng-model="filter.DateRange" value="1" ng-checked="(filter.DateRange == 1)"/>