Spielen Sie mit dem entsprechenden Code: http://jsfiddle.net/gFCzV/7/
Ich versuche, den ausgewählten Wert einer Dropdown-Liste festzulegen, die an eine untergeordnete Auflistung eines Objekts gebunden ist, auf das in einer ng-Wiederholung verwiesen wird. Ich weiß nicht, wie ich die ausgewählte Option festlegen soll, da ich nicht auf die Sammlung verweisen kann, an die sie gebunden ist.
[~ # ~] 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"
}];
});
Ist dies der einzige Fall, in dem ich eigentlich ng-init mit einem SelectedIndex auf dem Modell verwenden sollte?
Wenn Sie AngularJS 1.2 verwenden, können Sie mit 'Verfolgen nach' Angular angeben, wie Objekte verglichen werden sollen.
<select
ng-model="Choice.SelectedOption"
ng-options="choice.Name for choice in Choice.Options track by choice.ID">
</select>
Geige aktualisiert http://jsfiddle.net/gFCzV/34/
Sie können das Feld ID
als Gleichheitsbezeichner verwenden. Sie können das Ad-hoc-Objekt für diesen Fall nicht verwenden, da AngularJS beim Vergleichen von Objekten referenziert Gleichheit prüft.
<select
ng-model="Choice.SelectedOption.ID"
ng-options="choice.ID as choice.Name for choice in Choice.Options">
</select>
Verwenden Sie ng-selected für den ausgewählten Wert. Ich habe erfolgreich Code in AngularJS v1.3.2 implementiert
<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>