2014-06-13 89 views
0

以下對象綁定到select時,我得到一個奇怪的行爲綁定:選擇數據對象

REGIONSH = {0:"All Regions",1:"Europe",2:"North America"}; 

HTML(其中region是關鍵一整數):

<select ng-model="REGIONSH[region]" ng-options="name for(key,name) in REGIONSH"> 

行爲是選擇正確的選項正確填充列表,但是當我更改region變量時,所選條目正常變化,但突然將原始選擇和新選擇命名爲相同的東西。

例如,我將選擇列表中的第二個元素,並將原來的元素從「所有區域」重命名爲「北美」。

期望的行爲是讓我有一個選擇,我可以從對象中的每個值中選擇,同時將密鑰作爲option的值。

+0

另外,如果我嘗試設置'NG-模型'只是整數(這也恰恰是索引)我只是用'?'作爲值得到一個空的選項。 –

+1

我認爲你正在遞歸地使用'ng-model',而它應該只是'ng-model =「region」'。 [Plunker](http://plnkr.co/edit/sR2rv8F5p37OHYkCHNb3?p=preview)是你在說什麼? –

+0

@MorganDelaney region變量是引用對象中的鍵的整數。 –

回答

1

你有你的HTML的方式:

<select ng-model="REGIONSH[region]" ng-options="name for(key,name) in REGIONSH"> 

它會正確顯示列表中,但每當用戶做出選擇的區域的name(「name for(key,name)」)將被綁定到哪裏ng-model是指向至。

當用戶進行選擇。說第一個選項的含義,它ng-model將有效地執行

REGIONSH[region] = /*name of the selected region*/; 

其中在指數region名稱分配給區域。

你可能想要的是ng-model="region",所以這些值被分配給region變量,而不是選項。 (或任何其他變量要選擇存儲,可能不會在REGIONSH雖然)

然後你還需要會ng-options="key as name for (key, name) in REGIONSH,所以它仍然顯示的名字,但現在每當用戶進行選擇分配key。 (Read here在許多ng-options格式,你可以使用)

含義時作出選擇它執行

region = /*key of the selected region*/; 

最終的結果將是

<select ng-model="region" ng-options="key as name for(key,name) in REGIONSH"> 
+0

嗯,我現在試過了,事情是 - 當我設置區域時,它立即翻轉回'?'選項。我在答案的最後使用了確切的東西。 'region'變量是指對象中的一個鍵。 –

+0

@ChristianStewart我稍微修改了其他評論者plunkr,[這裏是上述代碼的工作示例](http://plnkr.co/edit/RZYjm8gnOA9bK2mnfE8d?p=preview)。你可能需要額外的'option'標籤,這取決於你的瀏覽器的古老程度 – Philipp

+0

我不需要初始選項,因爲'region'變量總是成爲對象的關鍵。儘管我仍然使用'?'作爲空鍵選擇選項。 –