必要なのは、テーブルを再レンダリングする方法、またはクライアントがロードされたらその事実を達成する方法だけだと思います。ディレクティブ内で試し$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();
}
});
},
}
})