AngularJS ng对象数据源的选项表达式 - 是否可以在某处存储属性键?

时间:2014-08-30 17:09:20

标签: 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 yearMonths"表达式我得到下拉列表中显示的键(年),然后选择一个用值(月)数组填充模型。这就是我想要的,而且我没有遇到任何问题,但是我也想将选定的密钥(年份)存储在某处,因为我需要将其传递给另一种方法。

是否可以将其关闭或者我采取了错误的做法?

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

select (year, months) as year for (year,months) in yearMonths - 什么都没有显示 year for (year, (year, months)) in yearMonths - 格式错误的表达式异常

但坦率地说,我不太了解ngOptions和ngRepeat的表达方式(选择实际做了什么以及如何使用,我还没有看到它的任何例子)< / p>

1 个答案:

答案 0 :(得分:1)

您可以使用ng-options documentation 中指定的此表示法:

select as label for (key , value) in object

  

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

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

<强> DEMO

<强> HTML

<select ng-options="{year: year, months: months} as year for (year, months) in years" ng-model="currentYear"></select>

上面的ng-options表明,当您选择一年时,模型将绑定到具有yearmonths键值的JSON对象。

<强>更新

将对象用作select表达式不会将ngModel的{​​{1}}与当前选定的值绑定。我进一步调查了它,似乎这是$viewValue真正起作用的方式,它解析ng-options表达式(它毕竟需要一个字符串表达式,引用行404 - 406)。由于它select的{​​{1}}找到与其github存储库的行 331 中的viewValue表达式匹配的valueFn,然后映射原始源值如果它是对象表示法,则无法使用当前所选的选项值。

<强> DEMO

或者你可以这样做:

<强> HTML

select