2014-10-05 81 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