2015-05-09 48 views
0

我在嘗試隔離ng-repeat中的模型,但此模型必須能夠訪問相同的數據。ng-repeat中的獨立模型

這裏是JS-撥弄來說明一個問題: http://jsfiddle.net/r50adyx4/

如果點擊Add按鈕,就可以看到選擇的選項之間進行切換,只有先選擇輸入被隔離。其他兩個正在改變每個重複的模型。

<div class="addCert" ng-click="allLicences.push(allLicences.length+1)"> 
     <p>Add certification +</p> 
    </div> 
<form ng-submit="processForm()"> 
    <ul ng-repeat="licence in allLicences"> 
     <select ng-model="models[licence]" ng-options="l.cntryName for l in data"></select> 
     <select ng-model="models[licence].discipline" ng-options="d.name for d in models[licence].disciplines"></select> 
     <select ng-model="models[licence].discipline.level" ng-options="lvl.levelName for lvl in models[licence].discipline.levels"></select> 
    </ul> 

我認爲,在NG-重複與models[licence]瞄準模式將盡一切次數孤立。

那麼是怎麼回事? 我怎樣才能隔離其他兩個,所以他們將是唯一的每個ng重複?

編輯,使事情更加清楚:
如果添加一個或多個模型(證書),並選擇同一國家(比如說斯洛文尼亞),所有這些車型另外兩個選擇必須是獨立的每個模型。

如果可行,我可以選擇斯洛文尼亞 - >高山滑雪 - > U1在第一個和斯洛文尼亞 - > Telemark - > U5在第二個。
我希望我足夠清楚......

+0

這些模型不是孤立的,雖然你可能會認爲他們是。第一個選擇填充整個'l'對象,選擇它將'l'對象綁定到''[許可證]模型。在另一個下拉列表中選擇相同的'l'將綁定相同的**'l'對象到'models [license]'。任何'l'的變化都會反映在其他所有變量中。你想要做的事情需要你將你的數據結構分成多個列表。 – Claies

回答

1

JSFiddle

在重複每個項目應該是指這樣任何綁定是分開的單獨的對象(數據)。

JS

$scope.add = function() { 
    $scope.allLicences.push(angular.copy($scope.data)); 
} 

$scope.allLicences = []; 
$scope.add(); 

標記

<div class="addCert" ng-click="add()"> 
    <p>Add certification +</p> 
</div> 
<form ng-submit="processForm()"> 
    <ul ng-repeat="licenceItem in allLicences"> 
     <select ng-model="licence" ng-options="l.cntryName for l in licenceItem"></select> 
     <select ng-model="licence.discipline" ng-options="d.name for d in licence.disciplines"></select> 
     <select ng-model="level" ng-options="lvl.levelName for lvl in licence.discipline.levels"></select> 
    </ul> 
    <hr> 
    <hr>{{ allLicences}} 
    <input type="submit" value="submit"> 
</form> 

編輯

我覺得這個版本是更好,因爲你沒有做數據的副本 - JSFiddle

JS

$scope.add = function() { 
    $scope.allLicences.push({}); 
} 

標記

<ul ng-repeat="item in allLicences track by $index"> 
     <select ng-model="allLicences[$index].licence" ng-options="l.cntryName for l in data"></select> 
     <select ng-model="allLicences[$index].discipline" ng-options="d.name for d in allLicences[$index].licence.disciplines"></select> 
     <select ng-model="allLicences[$index].level" ng-options="lvl.levelName for lvl in allLicences[$index].discipline.levels"></select> 
    </ul> 
+0

它實際上並不...如果我添加兩個或更多模塊,紀律和級別(第二和第三選擇)在它們之間共享。這是我想要隔離的。 – Leonajs

+1

@Leonajs所以你說當添加一個模塊(認證),並且我在第一個學科中選擇了Solvenia,並且在JSFiddle中的兩個模塊之間共享層次? –

+0

沒有當你選擇不同的學科或水平,對於同一個國家(斯洛維尼亞),他們在其他模型之間共享 – Leonajs