对象数据源的AngularJS ngOptions表达式-是否可以将属性键存储在某个位置
AngularJS ngOptions expression for object data source - is it possible to store the property key somewhere?
对于如下所示的对象:
{
"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
表明,当您选择一年时,模型将绑定到具有year
和months
键值的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]}}
- JavaScript-将多个对象存储在数组中,并通过访问它们的属性
- 将属性作为字符串存储在变量中
- 使用 jquery .find() 遍历按类和存储属性选择元素
- RefluxJS存储可以在调用trigger()时指示哪个属性已更改吗?
- 设置 HTML 自定义属性与在 ID 属性中存储信息
- 如何在 jQuery 中存储复杂对象/Razor 中的数据属性
- 如何在对象中存储html属性
- 将Firebase url存储在外部属性文件中
- 如何在EmberJS模板中访问存储在其他变量中的键中的对象属性的值
- 生成html时,在html数据属性中存储由.push()填充的数组
- 添加隐藏属性以存储其他属性值
- 有没有任何方法可以将json对象存储在HTML标记的默认/自定义属性中,比如<tr>
- 调用存储在对象属性中的Javascript函数
- 如何使用存储的属性来选择下拉值
- 设置存储在变量中的元素的属性
- Javascript新手..如何将对象属性存储为变量,并将其值存储为另一个变量
- JavaScript属性存储它
- 使用属性存储值
- 余烬关系: 类型错误: 无法设置未定义的属性“存储”
- 将属性存储在函数中,静态