$ scope仅在一个方法中缓存在页面上

时间:2016-11-10 21:58:41

标签: javascript angularjs ngtable angular-template angular-templatecache

当此页面加载时,以下每种方法中的$scope都包含相同的id值。 self.gridData将填充,因为它应该是selectAllClicked方法。

当我离开/返回页面时,所有$scope ID都会重新生成,除了.selectAllClicked方法中的那个。在.selectClickedAll方法中,id的{​​{1}}来自原始页面加载。由于console.log($scope)加载了self.gridData,但$scope中调用旧的$scope.selectAllClicked永远不会触发。

angular.forEach

这看起来(我相信)是与ng-table's 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(); } 指令相关的问题,位于下面的第一个header元素中。它从td加载复选框并存储在templatecache中。再次假设在这里,但似乎这会强制复选框绑定到原始范围,而不是重新渲染的范围。

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

0 个答案:

没有答案