1

我有这样的物品:

$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 中,这是我想要的(因为这也是将发布到后端的内容)。但是在选择框中它是空白的。为什么是这样?

我创建了一个 plunk:http://plnkr.co/edit/qKMPBbQsP6CJAeslrM6E

4

1 回答 1

0

原因是您不能将track byselect 作为语法一起使用。他们不一起工作。

因此,只需从表达式中删除 track by,就不需要使用select as语法,只需执行以下操作:

<select ng-model="selectedItem"
      ng-options="item.date as item.display for item in items"></select>

date以上仍然会产生具有对象属性值的ng-model 。

PLNKR

Select astrack by

出于保留选择的目的,track by 表达式始终应用于数据源的元素(在此示例中为 item)。要计算是否选择了元素,我们执行以下操作:

1) 将 track by 应用于数组中的元素。在示例中:[1, 2]

2)将track by应用于ngModel中已经选择的值。在示例中:这是不可能的,因为 track by 指的是 item.id,但是从 ngModel 中选择的值是 {name: 'aSubItem'},因此 track by 表达式应用于错误的对象,选择的元素不能被发现,总是重置为“未选择”选项。

于 2014-12-31T00:24:35.777 回答