0

ここに私のjsonオブジェクト:

 $scope.todos = [{
    name: 'angular',
    field: ['a', 'b', 'c', 'd'],
    id: 1
  }, {
    name: 'asd',
    field: ['a', 'b', 'c', 'd', 'e'],
    id: 2
  }];

私は次のように選択します:

<select ng-model="dashboard.type" ng-options="item as item.name for item in todos track by item.name"></select>

オプションが選択されると、前の選択を繰り返す別の選択が必要になりngModelます。次は次のようになります。

<select ng-model="dashboard.label" ng-options="item as item for item in dashboard.type.field"></select>

$scope.dashboard.type.name = 'qwe'オプションを手動で選択すると正常に動作しますが、それらがスクリプトのdashboard.type(例:)の値である場合、オブジェクト全体を保存track byするのではなく、オプションを選択してに保存するために使用します。使用した値を保存するだけですオプションdashboard.typeで。track by

dashboard.type の値:

  1. オプションを手動で選択すると: {"name":"qwe","field":["a","b","c","d","f"],"id":3}
  2. トラックバイ使用時: {"name":"qwe"}

注:は使用できませんtrack by item。オブジェクトのプロパティである必要がありますitem。またはのいずれnameidです。

ここにplnkrがあります。

編集 :

多くの人が指摘したように、オブジェクトをtodosリストの値に初期化できないことを明確にしたいと思います。これは、dashboard.type.name値が毎回todos異なり、リストが数十から数百のオブジェクトに変化するためです。todosここで、リストのチェックを繰り返しtodos[index].name==someName、関連するオブジェクトを割り当てる必要があります。私は積極的にこのソリューションを回避しようとしています (より良い方法が必要なので)。

注:ng-change実際のオブジェクトを使用して割り当てよ うとしましdashboard.type.nameたが、オプションが手動で選択された場合にのみ機能し、すでに正常に機能しているようです。使用時にオブジェクトを割り当てませんtrack by

重要: $scope.dashboard.type.name = 'qwe'は単なる例です。の値は$scope.dashboard.type.name、ページが読み込まれるたびに変わる可能性があります。

PS: また、これについては以前に言及しておくべきでした。申し訳ありません。

4

3 に答える 3

1

この問題はトラックバイによるものではありません。を実行してデフォルト値を設定する$scope.dashboard.type.name = 'qwe'と、のng-modelようになります$scope.dashboard.type = {name : 'qwe'}。このようにデフォルト値を選択する代わりに、 を使用する必要があります$scope.dashboard.type = $scope.todos[2];。これにより、オブジェクト全体が確実に に設定され$scope.dashboard.typeます。

編集されたプランカー

于 2016-06-17T07:23:38.183 に答える
0

デフォルト値でモーダルを初期化するには、ng-init を使用できます。例えば

 <select ng-init="dashboard.type = todos[2]" ng-model="dashboard.type" ng-options="item as item.name for item in todos track by item.name">
  </select>
于 2016-06-17T07:31:06.660 に答える
0

html の ng-init でこの関数を呼び出します

ng-init ="initialize();"

jsで

$scope.dashboard={};//initialize object
$scope.dashboard.type ={}//initialize object

$scope.initialize =function(){


//no need to iterate if it is certain that your Id and index is always same suppose your initial id is 3

//then
var currId =3;//suppose initial id is there
$scope.dashboard.type =$scope.todos[currId]

}

ここにcodepenがあり ます http://codepen.io/vkvicky-vasudev/pen/MeexmK

于 2016-06-17T09:28:22.793 に答える