当此页面加载时$scope
,以下每个方法中都包含相同的id
值。self.gridData
已按应有的方式填充,并且可以在selectAllClicked
方法中访问。
当我离开/返回页面时,所有$scope
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
?