27

「追跡」式を使用して、オブジェクトの配列で ID によって選択を追跡しようとしています。しかし、うまくいくと思うようにはうまくいかないようです。

//ids from server
$scope.serverDTO = ['1','2','3'];

//composed objects from the ID set
$scope.composedData = [{id:1,name:"test"},{id:2,name:"test"},{id:3,name:"test"}];

<!-- select box -->
<select ng-model="serverDTO" ng-options="item as item.name for item in composedData track by item.id"></select>

そのため、ドキュメントに基づいて、ロード時のオプション ディレクティブは、serverDTO に 1、2、および 3 の「追跡」ID があり、それらが事前に選択されていることを確認します。ユーザーが選択を変更した後、配列をサーバーに返すために次のようなことをする必要があります-

//recreate proper DTO [1,2,3];
$scope.serverDTO = $scope.serverDTO.map(function(val){
  return val.id;
});

これがどのように機能するはずなのか、私は途方に暮れていますか?

4

2 に答える 2

41

track by私の知る限り、配列の並べ替えでAngularを内部的に支援するだけです。オプションの値は、最初の引数 (あなたの場合item) によって定義されます。あなたがそれをIDでしたいなら、あなたは使うべきですitem.id as item.name for item in items

于 2014-04-30T20:23:50.230 に答える
7

「追跡」は、オブジェクトの ng-options 配列とモデルでオブジェクトも使用する場合に役立ちます。ただし、モデル内のオブジェクトの参照によってオプションを追跡する必要はありません。「追跡」を使用して、モデルの目的のフィールドでオプションを追跡することを示します。

「追跡」を使用する場合、 $scope.serverDTO は {id:1,name:"test"} のようにする必要があります

于 2015-05-27T15:28:34.613 に答える