选定日期不会保留在选择框中

时间:2014-12-31 00:20:22

标签: html angularjs angularjs-ng-options

我有这样的项目:

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

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

1 个答案:

答案 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应用于错误的对象,所选元素无法找到,始终重置为“未选中”选项。