2014-12-31 46 views
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屬性,這就是我想要的(因爲這將會發布到後端)。但是在選擇框中它保留爲空白。爲什麼是這樣?

我創建了一個普拉克:http://plnkr.co/edit/qKMPBbQsP6CJAeslrM6E

回答

0

的原因是因爲你不能與選擇爲語法使用軌道。他們不一起工作。

所以只是從表達中刪除的軌道,你不會有select as語法需要它,只是做:

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

以上仍然將導致NG-模型的的date屬性值目的。

Plnkr

Select as with track by

隨着保留選擇的目的,軌道由表達總是施加到數據源(項在此實例中)的元件。要計算是否選擇元素,我們執行以下操作:

1)將track by應用於數組中的元素。在該示例中:[1,2]

2)將軌道應用到ngModel中已經選擇的值。在這個例子中:這是不可能的,因爲track by item.id,但是從ngModel中選擇的值是{name:'aSubItem'},,所以通過表達式的軌跡被應用於錯誤的對象,被選中的元素可以'找不到,始終重置爲「未選中」選項。

+0

謝謝!這確實工作正常。 – rept

+0

@rept不客氣。 – PSL

相關問題