对于看起来像这样的对象:
{
"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>
答案 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
表明,当您选择一年时,模型将绑定到具有year
和months
键值的JSON对象。
<强>更新强>
将对象用作select
表达式不会将ngModel
的{{1}}与当前选定的值绑定。我进一步调查了它,似乎这是$viewValue
真正起作用的方式,它解析ng-options
表达式(它毕竟需要一个字符串表达式,引用行404 - 406)。由于它select
的{{1}}找到与其github存储库的行 331 中的viewValue
表达式匹配的valueFn
,然后映射原始源值如果它是对象表示法,则无法使用当前所选的选项值。
<强> DEMO 强>
或者你可以这样做:
<强> HTML 强>
select