1

必要なのは、テーブルを再レンダリングする方法、またはクライアントがロードされたらその事実を達成する方法だけだと思います。ディレクティブ内で試し$scope.$apply()ましたが、$digest サイクルが既に発生していると不平を言っています。また、組み込みの ngTableParams も試しましたreload()が、何もしていないようです。私のディレクティブ内ではdata、空の配列として開始されますが、その後すぐに約 20 個のアイテムが取り込まれます。更新された結果が表示されないだけです。


<div class="row">
    <j-table data="clients" search="search" class="table small-8 columns end">
        <td data-title="'Name'" sortable="'last'">
            <span>{{client.first || 'no name'}}</span>
            <span>{{client.last || ''}}</span>
        </td>
        <td data-title="'Address'" sortable="'city'">{{client | formatAddress}}</td>
    </j-table>
</div>

angular.module('locqusAngular').directive('jTable', function () {
    return {
        restrict: 'E',
        transclude: true,
        scope: {
            data: '=',
            search: '='
        },
        template:
            '<table ng-table="tableParams"> \
                <tr ng-repeat="d in $data | filter:search.term"> \
                    <div ng-transclude></div> \
                </tr> \
            </table>',
        controller: function ($scope, $filter, ngTableParams) {
            $scope.tableParams = new ngTableParams({
                page: 1,
                count: 10,
                sorting: {
                    name: 'asc',
                    filter: $scope.search
                },
                filter: {}
            }, {
                total: $scope.data.length,
                getData: function ($defer, params) {
                    var orderedData = params.sorting() ? $filter('orderBy')($scope.data, params.orderBy()) : $scope.data;
                    $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
                }
            });

            $scope.$watch('data.length', function(newx, oldx) {
                if (newx != null && newx !== oldx && newx > 0) {
                    $scope.tableParams.reload();
                }
            });
        },
    }
})
4

0 に答える 0