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>

1 時間を選択すると、その後も選択画面に表示されたままになります。ただし、これは 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"

これは私が欲しいものです(それがバックエンドにも投稿されるため)。ただし、選択ボックスでは空白のままです。どうしてこれなの?

プランクを作成しました: http://plnkr.co/edit/qKMPBbQsP6CJAeslrM6E

4

1 に答える 1

0

その理由は、 select as構文でtrack byを使用できないためです。それらは一緒には機能しません。

したがって、式からトラックバイを削除するだけです。構文では必要ありません。次のようにするselect asだけです。

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

上記でもdate、オブジェクトのプロパティ値を持つ ng-model が生成されます。

プランク

Select astrack by

選択を保持する目的で、トラック バイ式は常にデータ ソースの要素 (この例ではアイテム) に適用されます。要素が選択されているかどうかを計算するには、次のようにします。

1) 配列内の要素に track by を適用します。例: [1, 2]

2) ngModel で既に選択されている値に track by を適用します。例: track by が item.id を参照するため、これは不可能ですが、ngModel から選択された値は {name: 'aSubItem'} であるため、track by 式が間違ったオブジェクトに適用され、選択された要素は適用されません。常に「未選択」オプションにリセットされます。

于 2014-12-31T00:24:35.777 に答える