關於ngOptions的鍵值對

在Angularjs中,ng-options的參數能夠由數組、Object等組成,最終編譯成:angularjs

<option value="value">label</option>數組

其中value是值,label是顯示的內容。好比,對於這樣一個Object:ide

m = { text: '文字' picture: '圖片' gif: 'GIF' video: '視頻' }code

若是這樣使用:視頻

<select name="type" ng-model="anyname" ng-options="k as v for (k, v) in m"> </select>圖片

則:get

value = k = text|picture|gif|video label = v = 文字|圖片|GIF|視頻 type = k : v (比較的是引用) anyname = valueit

valueas v的k,頁面上顯示的內容是for(k,v)中的v。這樣,顯示和取值兩不誤。Stackoverflow 上的解說印證了上面的結果。io

注意:若是寫成ng-options="v as v for (k, v) in m",則value和label均不變,但實際讀到的值anyname=v。編譯

使用object很方便,但有個問題,下拉列表的顯示順序是字典順序,而不是咱們的書寫順序。爲了保證順序的一致性,必須使用數組:

m = [ { v: 'text', t: '文字' }, { v: 'image', t: '圖片' }, { v: 'video', t: '視頻' } ]

用法以下:

<select name="type" ng-model="anyname" ng-options="atype.v as atype.t for atype in m" ng-init="type='text'">

這樣順序問題就解決了,但讀值就麻煩多了,需經過遍歷取值。

相關文章
相關標籤/搜索