2016-12-06 12 views
2

を変更NG-モデルに応答しない:角度の選択は、私はこのようになりますその選択を持っている

{{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> 

は私の項目の配列は次のようになります。

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

とアイテムvm.selectedは " foob​​ar "

両方のバインディングが正しく選択項目の上に表示されますが、項目は選択されていません。私は、開発ツールで選択を検査するとき、私は最初に選択した項目としてこれを持っている:

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

また、私は、この要素の上にクリックを使用していたときにng-click="vm.selected = 'quux'"何も変化しないと。 {{vm.selected}}は常に更新されます。誰が何が間違っているかの手がかりを持っていますか?

+1

これは正しく動作するはずです。あなたはjsfiddleで再現できますか? – devqon

+0

ng-click = "vm.selected = 'quux'"の代わりに、なぜあなたは試してみませんか: ng-init = "vm.selected = items [2]" " – MSH

+0

コレクション内のオブジェクトに直接バインドする:[[ドキュメント](https://docs.angularjs.org/api/ng/directive/ngOptions#complex-models-objects-or-collections-) –

答えて

1

track by item.value問題がある:

代わりに、次の形式の昔の表現が作ります。これを削除すると、値を選択するとvm.selectedが正しく表示され、選択が機能することがわかります。

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

1

あなたNG-オプション式が

を引用official ngOption documentation

に応じて動作しませんが、これは動作しません。

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

だからあなた

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

は動作しません。

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

関連する問題