0

このページがロード$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か?

4

0 に答える 0