0

当此页面加载时$scope,以下每个方法中都包含相同的id值。self.gridData已按应有的方式填充,并且可以在selectAllClicked方法中访问。

当我离开/返回页面时,所有$scopeid 都会重新生成,因为它们应该是除了.selectAllClicked方法中的那个。在.selectClickedAll方法idconsole.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

4

0 回答 0