Violon avec le code correspondant: http://jsfiddle.net/gFCzV/7/
J'essaie de définir la valeur sélectionnée d'un menu déroulant lié à une collection enfant d'un objet référencé dans une répétition ng. Je ne sais pas comment définir l'option sélectionnée car je ne peux pas faire référence à la collection à laquelle elle est liée de quelque manière que ce soit à ma connaissance.
[~ # ~] html [~ # ~] :
<div ng-app="myApp" ng-controller="SomeController">
<div ng-repeat="Person in People">
<div class="listheader">{{Person.firstName}} {{Person.lastName}}</div>
<div class="listitem" ng-repeat="Choice in Person.Choices">
{{Choice.Name}}:
<select
ng-model="Choice.SelectedOption"
ng-options="choice.Name for choice in Choice.Options"></select>
{{Choice.SelectedOption.ID}}
</div>
</div>
</div>
[~ # ~] js [~ # ~] :
var myApp = angular.module('myApp', []);
myApp.controller("SomeController", function($scope) {
$scope.People = [{
"firstName": "John",
"lastName": "Doe",
"Choices": [
{
"Name":"Dinner",
"Options":[{Name:"Fish",ID:1}, {Name:"Chicken",ID:2}, {Name:"Beef",ID:3}],
"SelectedOption":{Name:"Chicken",ID:2} //this doesn't work
},
{
"Name":"Lunch",
"Options":[{Name:"Macaroni",ID:1}, {Name:"PB&J",ID:2}, {Name:"Fish",ID:3}],
"SelectedOption":""
}
],
}, {
"firstName": "Jane",
"lastName": "Doe"
}];
});
Est-ce le seul cas où je devrais utiliser ng-init avec un SelectedIndex sur le modèle?
Si vous utilisez AngularJS 1.2, vous pouvez utiliser "piste par" pour dire à Angular comment comparer des objets.
<select
ng-model="Choice.SelectedOption"
ng-options="choice.Name for choice in Choice.Options track by choice.ID">
</select>
Violon mis à jour http://jsfiddle.net/gFCzV/34/
Vous pouvez utiliser le champ ID
comme identifiant d'égalité. Vous ne pouvez pas utiliser l'objet ad hoc dans ce cas car AngularJS vérifie égalité de références lors de la comparaison d'objets.
<select
ng-model="Choice.SelectedOption.ID"
ng-options="choice.ID as choice.Name for choice in Choice.Options">
</select>
Utiliser ng-selected pour la valeur sélectionnée. J'ai implémenté avec succès du code dans AngularJS v1.3.2
<select ng-model="objBillingAddress.StateId" >
<option data-ng-repeat="c in States" value="{{c.StateId}}" ng-selected="objBillingAddress.BillingStateId==c.StateId">{{c.StateName}}</option>
</select>