2014-10-05 127 views
1

我有一個webserver(node.js),它提供包含以下格式的語言列表的JSON文件:{ "en" : "English", "fr" : "French" }(依此類推)。還有一個單獨的JSON即設置字典:{ "currentLanguage" : "en" }(還有其他設置)。ngOptions按值進行比較

的選擇是如下:

<select ng-options="for (code, name) in languages track by code" ng-model="config.currentLanguage"></select> 

然而,這總是導致一個空白選項被添加和選擇。這是因爲是通過引用而不是按值來比較值。有沒有辦法強制它使用價值呢?這似乎是一個很常見的事情,要將當前的選擇數據與用於生成選項的數據分開,還是有另外一種方法可以解決這個問題?

回答

0

我不確定你的問題來自於參考檢查;您使用的語法會忽略可選的「select」參數,這會導致我假定綁定該值的默認行爲正在實施。這意味着,你將一個名字綁定到一個config.currentLanguage,它似乎最初擁有一個「code」值。我想這可能是你最初無法選擇它的原因:你正在一個只包含「英語」的列表中尋找「en」。

爲了解決這個問題,假設你確實想要存儲的代碼,你應該寫你的NG-選項如下:

ng-options = "code as name for (code, name) in countries track by code" 
+0

哦,我以爲'軌道by'將意味着所有跟蹤由完成下面的表達。 – 2014-10-05 14:34:27

+0

track by only通過角度來檢查代碼,以確定兩個項目是否相同:如果遇到另一個具有相同軌道值的項目,則會跳過該項目。否則,當你發現重複時,你的ng-repeat會發出錯誤。這條線解決了您的問題,還是您還遇到一些不尋常的行爲? – Sycomor 2014-10-05 17:33:59