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

AngularJS ngOptions expression for object data source - is it possible to store the property key somewhere?

本文关键字:属性 存储 位置 AngularJS 数据源 ngOptions 表达式 是否 对象      更新时间:2023-09-26

对于如下所示的对象:

{
"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的表达式(select实际做了什么以及它是如何使用的,我还没有看到任何例子)

您可以使用ng-options文档中指定的符号

select as label for (key , value) in object

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

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

演示

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$viewValue与当前选定值绑定。我对它进行了进一步的研究,这似乎是ng-options真正的工作方式,它解析select表达式(毕竟它需要一个字符串表达式,参考行404-406)。由于它通过与其github存储库的第331行中的select表达式相匹配的valueFn来定位其viewValue,因此,如果当前所选选项值为对象表示法,则无法映射其原始源值。

演示

或者你可以这样做:

HTML

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