2016-12-06 4 views
2

ich eine wählen, die wie folgt aussieht:Angular wählen reagiert nicht auf die ng-Modell ändert

{{vm.selected}} 
{{vm.items}} 
<select ng-options="item.value as item.label for item in vm.items track by item.value" ng-model="vm.selected"> 
</select> 

Meine Artikel Array wie folgt aussieht:

this.items = [ 
    { 
    "label":"Foo Bar", 
    "value":"foobar" 
    }, 
    { 
    "label":"Baz Quux", 
    "value":"quux" 
    } 
]; 

und das Element vm.selected ist " foobar "

beide Bindungen werden korrekt über der Auswahl angezeigt, aber das Element ist nicht ausgewählt. Wenn ich die Auswahl in Entwickler-Tools überprüfen habe ich dies als die erste ausgewählte Element:

<option value="?" selected="selected"></option> 

Auch wenn ich klicken Sie einfach ng-click="vm.selected = 'quux'" nichts auf dieses Element verwende geändert wird. Die {{vm.selected}} wird immer aktualisiert. Jeder hat eine Ahnung, was ist los?

+1

Dies sollte korrekt funktionieren. Können Sie sich in einem Spiel reproduzieren? – devqon

+0

Anstatt ng-click = "vm.selected = 'quux'", versuchen Sie es nicht: ng-init = "vm.selected = items [2] '" – MSH

+0

Direkt an das Objekt in der Sammlung binden: [ Dokumentation] (https://docs.angularjs.org/api/ng/directive/ngOptions#complex-model-objects-oder-collections-) –

Antwort

1

Die track by item.value problematisch ist. Wenn Sie das entfernen, können Sie sehen, dass vm.selected sich nach der Auswahl eines Werts korrekt darstellt und die Auswahl funktioniert.

http://codepen.io/jusopi/pen/PbeoWN

1

Ihre ng-Option Ausdruck nicht

Zitiert

nach official ngOption documentation arbeiten, aber das wird nicht funktionieren:

item.subItem as item.label for item in items track by item.id

So Ihre

ng-options="item.value as item.label for item in vm.items track by item.value"

wird nicht funktionieren.

Statt ehedem Ausdruck folgendem Format machen:

item as item.label for item in items track by item.id