2016-06-17 40 views
0

這裏我的JSON對象:AngularJS ngOptions按部就班地進行,整個對象不設置爲ngModel

$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。接下來的樣子:在我的腳本,它使用track by選擇選項並保存:

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

它,當我手動選擇的選項,但是當他們在dashboard.type值($scope.dashboard.type.name = 'qwe'如)工作正常在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列表從10到100個對象不等。現在我必須遍歷列表todos檢查todos[index].name==someName並分配相關的對象。我正在積極嘗試避免這種情況(因爲必須有更好的方法)。

注:我也使用ng-change嘗試和實際的對象分配給dashboard.type.name但是,只有當選擇手動選擇,這似乎已經工作正常工作。當使用track by時,它不分配對象。

重要提示:$scope.dashboard.type.name = 'qwe'只是一個例子。每次加載頁面時,$scope.dashboard.type.name的值可能會發生變化。 PS:另外我應該早些提到這一點。謝謝,我的壞!

+0

只是改變你的初始化像這 $ scope.dashboard = {}; \t $ scope.dashboard.type = {} \t $ scope.dashboard.type = { name:'qwe', field:['a','b','c','d','f '], id:3 }; –

+0

如果我可以做的最後一部分沒有遍歷'todos'列表比是的,它會工作。 PS:我已經更新了這個問題,請再次檢查。 –

+0

在這種情況下,在ng-init上調用一個函數並根據你想要的值進行初始化 –

回答

0

這個問題不是因爲跟蹤。 ng型號設置爲$scope.dashboard.type.name = 'qwe',$scope.dashboard.type = {name : 'qwe'}。而不是你應該使用$scope.dashboard.type = $scope.todos[2];,如果你想設置select的值。

Edited plunker

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> 
0

通話NG-INIT 此功能在HTML

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

+0

我剛剛給出了一個隨機條件,如果你可以使用你自己的條件 –

+0

謝謝,但在這裏你使用'.forEach()'來循環訪問列表並將有效的對象設置爲'$ scope.dashboard.type'作爲我提到這個解決方案的工作原理,但我的問題是:有沒有更好的方式來做到這一點,而不是循環遍歷列表? –

+0

如果您知道最初要選擇的ID,並且確定您的ID始終與數組索引匹配,則可以完成該操作,請查找已更改的代碼筆 –

相關問題