我有这样的项目:
$scope.items = [{"date":"2014-12-26T05:00:00.000Z","display":"6:00"},
{"date":"2014-12-26T05:15:00.000Z","display":"6:15"},
{"date":"2014-12-26T05:30:00.000Z","display":"6:30"}]
当我这样做时:
<select ng-model="selectedItem"
ng-options="{'date':item.date} as item.display for item in items track by item.date"></select>
我可以选择一个小时,然后在选择中保持可见。然而,这是发送给selectedItem的内容:
{"date": "2014-12-26T06:15:00.000Z"}
如果我将其更改为:
<select ng-model="selectedItem"
ng-options="item.date as item.display for item in items track by item.date"></select>
然后是值
"2014-12-26T05:15:00.000Z"
放在selectedItem中,这就是我想要的(因为这也是将发布到后端的内容)。但是在选择框中,它留空。这是为什么?
答案 0 :(得分:0)
原因是您无法使用跟踪并使用选择语法。他们不能一起工作。
因此,只需从表达式中删除跟踪,您就不需要使用select as
语法,只需执行以下操作:
<select ng-model="selectedItem"
ng-options="item.date as item.display for item in items"></select>
上述内容仍将导致ng-model具有对象的date
属性值。
<强> Plnkr 强>
<强> Select as
with track by
强>
为了保留选择,track by expression始终应用于数据源的元素(在本例中为item)。要计算是否选择了元素,我们执行以下操作:
1)将track by应用于数组中的元素。在示例中:[1,2]
2)将跟踪应用于ngModel中已选择的值。在示例中:这不可能因为track by引用item.id,但是来自ngModel的选定值是{name:'aSubItem'},所以track by expression应用于错误的对象,所选元素无法找到,始终重置为“未选中”选项。