Javascript 对象数据源的AngularJS ngOptions表达式-是否可以将属性键存储在某个位置?

Javascript 对象数据源的AngularJS ngOptions表达式-是否可以将属性键存储在某个位置?,javascript,angularjs,Javascript,Angularjs,对于如下所示的对象: { "2014":[1,2,7,8,11], "2013":[6,7,8,9,10,11,12], "2012":[1,2,4,7,8,12], }; (参考键为年,值为发生某些事件时的月数组。) 使用ng options=“year for(year,months)in yearmonds”expression,我将获得下拉列表中显示的关键帧(years),然后选择一个,用值(months)数组填充模型。这就是我想要的,我对此没有任何问题,但是我也希望将所选密钥(年份)

对于如下所示的对象:

{
"2014":[1,2,7,8,11],
"2013":[6,7,8,9,10,11,12],
"2012":[1,2,4,7,8,12],
};
(参考键为年,值为发生某些事件时的月数组。)

使用
ng options=“year for(year,months)in yearmonds”
expression,我将获得下拉列表中显示的关键帧(years),然后选择一个,用值(months)数组填充模型。这就是我想要的,我对此没有任何问题,但是我也希望将所选密钥(年份)存储在某个位置,因为我需要将其传递给另一个方法

是否有可能做到这一点,或者我采取了错误的方法

到目前为止,我已经尝试更改表达式,希望将键和值绑定到模型。我尝试过创建表达式:

选择(年、月)作为年月份中(年、月)的年月份
-不显示任何内容
year for(year,(year,months))in yearMonths
-格式错误的表达式异常


但是坦率地说,我不太理解ngOptions和ngRepeat的表达式(select实际上做了什么,它是如何使用的,我还没有看到它的任何示例)

您可以使用
ng选项中指定的符号:

选择对象中(键、值)的标签

选择:此表达式的结果将绑定到的模型 父元素

这意味着无论您在
select
表达式中决定何种格式(变量或对象),它都将绑定到模型本身

HTML

<select ng-options="{year: year, months: months} as year for (year, months) in years" ng-model="currentYear"></select>
<select ng-options="year as year for (year, months) in years" ng-model="currentYear"></select><br /><br />
Current Year: {{currentYear}}<br />
Months: {{years[currentYear]}}

你的问题不是很清楚。你可以尝试一种不同的方法,并以不同的方式格式化你的数据以避免这个问题?@GuilhemSoulas我不能以不同的方式格式化数据,因为我从web服务接收数据。我的问题哪一部分不清楚?我想要的是将键和值都存储到ngSelect的绑定模型中,而不仅仅是值。是的,您可以!您从控制器(或模型)中的web服务接收数据。在那里,你可以应用任何你想让你更容易使用的逻辑。最好在视图中放入尽可能少的逻辑。我可能会尝试解析相对较大的对象并创建一个较小的对象数组,但我相信这会对应用程序的性能产生负面影响,获取所需的值或更改表达式(如答案中所示)可能会更快(我总是认为大型、著名的库经过优化,可以比我所能破解的更快地工作)这正是我想要的。在我看来,文档中的“选择”解释有点欠缺,而且我也没有找到任何例子,所以,打个比方说,我在打阴影。非常感谢你的帮助,尽管我似乎已经注意到了一个问题。不确定它是否与浏览器相关(我使用的是Firefox 31.0)但所选值不会显示在下拉菜单中(例如,在您的小提琴中,选择“2014”可将值正确绑定到模型,但下拉菜单保持空白,而不会显示当前所选的年份“2014”)这是有效的。我忘记了JS对象可以像C++的字典一样使用。