このページがロード$scope
されると、以下の各メソッドに同じid
値が含まれます。必要に応じてデータが入力され、メソッドself.gridData
でアクセスできます。selectAllClicked
ページから移動したり、ページに戻ったりする$scope
と、メソッド内の ID を除いて、すべての ID が再生成され.selectAllClicked
ます。.selectClickedAll
メソッドでid
は、のはconsole.log($scope)
元のページの読み込みからです。self.gridData
は新しいものにロードされます$scope
が、古い$scope
ものは で呼び出されるため.selectAllClicked
、 は起動しangular.forEach
ません。
var self = this;
$scope.selectAllClicked = function(){
console.log($scope);
angular.forEach(self.gridData, function(item) {
item.selected = self.selectAllCheckbox;
});
};
var dataSuccess = function(data){
console.log($scope);
self.gridData = data.data;
angular.forEach($scope.gridData, function (cr) {
cr.rowId = rowIdCount++;
});
self.tableParams.total(data.rowsCount);
return self.gridData;
};
var setupGrid = function(){
console.log($scope);
self.tableParams = $rootScope.gridParamsHash["recordingsList"] || new NgTableParams({count: 25 }, {
counts: [25, 50, 100],
getData: function(params) {
var filter = params.filter();
var sorting = params.sorting();
var count = params.count();
var page = params.page();
return recordingsService.getGridRecordings(page, count, filter, sorting, $scope.externalFilterParams.callType, $scope.externalFilterParams.externalDateFilters ).then(dataSuccess, dataFail);
}
}, 3600000); // This delay is a workaround to prevent the ngTable from reloading
};
function init() {
console.log($scope);
setupGrid();
}
これは、以下の最初の要素の ng-table の header
ディレクティブに関連する問題のようです (私は信じています) 。td
からチェックボックスをロードheaderCheckbox.html
し、テンプレートキャッシュに保存しています。ここでも仮定しますが、これにより、チェックボックスが再レンダリングされたスコープではなく、元のスコープに関連付けられるようになります。
<script type="text/ng-template" id="headerCheckbox.html">
<input type="checkbox" ng-model="vm.selectAllCheckbox" ng-change="selectAllClicked()" />
</script>
<table ng-table="vm.tableParams" class="table testTable" fixed-table-headers="scrollable-area">
<tr ng-repeat="row in $data" ng-class="{'selected':row.rowId == rowId}" ng-click="setClickedRow(row.rowId)">
<td width="40" header="'headerCheckbox.html'"><input type="checkbox" ng-model="row.selected"/></td>
<td data-title="'Username'" filter="{ username: 'text'}" width="30">{{row.username}}</td>
</tr>
</table>
$scope.selectAllClicked
新しくレンダリングされた にそれ自体を強制的に適用する方法はあります$scope
か?