2013-10-17 79 views
2

我有一個基本的crud應用程序,並且我隱藏了表中的列以顯示用戶想要查看的輸入。我設法通過將ng-model綁定到表列並將相同模型綁定到複選框來顯示/隱藏輸入,因此在複選框被選中時隱藏。AngularJS將模型綁定到ngRepeat(並評估它)

因爲我有很多數據,我不想在我的模板中保留輸入,所以我決定改爲ng-repeat

赫雷什我的控制器:

// simplified for this Q 
$scope.columns = [ 
    { name: '#ID', checked: false, model: 'checkedId' }, 
    { name: 'Container', checked: false, model: 'checkedContainer' }, 
    { name: 'Type', checked: true, model: 'checkedType' } 
]; 

這是在我的HTML(它被呈現前):

<label ng-repeat="col in columns"> 
    <input type="checkbox" name="cols[]" value="{{col.name}}" 
     ng-checked="col.checked" ng-model="col.model"><span>{{col.name}}</span> 
</label> 

呈現的HTML看起來像這樣:(用於第二項陣列中的[陣列插槽1])

<label ng-repeat="col in columns" class="ng-scope"> 
    <input type="checkbox" name="cols[]" value="Container" 
     ng-checked="col.checked" 
     ng-model="col.model" class="ng-pristine ng-valid"> 
    <span class="ng-binding">Container</span> 
</label> 

我隱藏這樣的元素:

<input type="checkbox" ng-model="checkedContainer"><span>checkedId</span> 

即該元件要隱藏看起來像這樣(另一中繼器)

<td class="check-element" ng-hide="checkedContainer">{{ c.container }}</td> 

所以毫克模型綁定的列,並且,如果我手動插入輸入像上面,它的工作原理。但是,當循環它沒有。我認識到問題在於循環。這樣模型就不會被評估,但在html中保持「col-model」。有沒有辦法將模型評估到$scope.columns陣列中的相應模型?

基本上我想我的$scope.columns.model被評估爲它所屬的模型。我設法將改變mg-model的值綁定到ng-bind,但這不適用於數據綁定,因爲我瞭解它的唯一方法。

回答

2

解決方法,在你的範圍添加$scope.scope = $scope;然後分配模式,如:

ng-model="scope[col.model]" 

工作例如:http://jsfiddle.net/cherniv/Ydbhj/

UPDATE:知道了!正如我們所知,ng-repeat創建一個新的scope,所以這會在這種情況下工作:

ng-model="$parent[col.model]" 

而且沒有必要$scope.scope = $scope;

最終的解決方案:http://jsfiddle.net/cherniv/4CTgr/

+0

哇!那很快!非常感謝先生!這完美的作品! – stormpat

+0

@PatrikStorm歡迎您,看看我的更新 – Cherniv

+0

好的,再次感謝!我現在使用$父範圍。 – stormpat