2016-08-12 4 views
1

ich ein Array von Objekten mit folgendem Format haben:ngOptions mit Array von Objekten stellt nicht den ersten Wert

[ 
    {key: 'SC', name: 'Santa Catarina'}, 
    {key: 'SP', name: 'São Paulo'}, 
    {key: 'RJ', name: 'Rio de Janeiro'} 
] 

Und ich will select und ng-options verwenden, um diese Werte zu zeigen:

<select ng-model="vm.state" 
    ng-options="state.name for state in vm.states"> 
</select> 

Wenn jedoch vm.state bereits einen Wert hat, beginnt die Auswahl nicht damit. Weiß jemand, wie man es macht?

Fiddle demonstrating the problem.

Dank! :)

Antwort

2

Sie track by in diesem Fall benutzen könnten, wo man von einem Ajax-Aufruf ausgewähltes Objekt abrufen.

<select ng-model="vm.state" 
     ng-options="state.name for state in vm.states track by state.key"> 
</select> 

JSFiddle

HINWEIS:track by wird nicht funktionieren, wenn Sie select as in ng-options expression.`

+0

Das ist genau das, was ich brauche! Vielen Dank! – tpsilva

+0

@tpsilva froh, das zu wissen. Vielen Dank :) –

1

Habe es selbst einstellen, so etwas wie

$scope.states=[...] 
$scope.state=$scope.states[0] 
+0

verwenden würde ich laufen müssen, um den Index des Objekts zu finden I wollen. Gibt es keine bessere Lösung? – tpsilva

1

Zuerst haben Sie es Ihre Selbst zu setzen, da vm.state den Wert von Ihrem vm.states erhalten. Sie können ng-init verwenden, um es zu setzen.

<select ng-model="vm.state" 
     ng-options="state.name for state in vm.states" ng-init="vm.state = $scope.states[0]"> 
    </select> 
+0

Der Wert wird von einem Service abgerufen, ich kenne den Index nicht ohne Iteration. Und das versuche ich zu vermeiden. – tpsilva

+0

können Sie Ihre Zustände filtern und den Index hereinbringen und Index einstellen. vm.states.filter (function (Zustand, Index, Selbst-) { if (valueFromService == Zustand) { vm.state = self [index]; } }) –

Verwandte Themen