2015-11-04 53 views
1

我有角度数据配置工作正常。我的配置看起来像数据更新后如何调用角度数据表分页刷新回调?

vm.dtOptions = DTOptionsBuilder.newOptions(). 
      withPaginationType('full_numbers'). 
      //withOption('ajax', { 
      // url: 'rest/get/'+entityName, 
      // type: 'GET' 
      //}). 
      withOption('serverSide', true). 
      withOption('ajax', function(data, callback, settings) { 
        EntityManager.get({entity:entityName,action:'get',start:data.start,length:data.length}).$promise.then(function(response) { 
        console.log('response'); 
        console.log(response); 
        vm.objectList = response.data; 

        callback({ 
         recordsTotal: response.recordsTotal, 
         recordsFiltered: response.recordsFiltered, 
         data: response.data 
        }); 

       }); 
      }). 
      withDataProp('data'). 
      withOption('processing', true). 
      withOption('bFilter', false). 
      withOption('bSort', false). 
      withOption("aaSorting", []). 
      withDisplayLength(10); 

但我也有过滤功能,更新数据和recordsTotal,因此,分页应该被重新渲染 - 最后一个按钮号必须进行修改。但它不会发生。有没有办法拨打电话

callback({ 
     recordsTotal: response.recordsTotal, 
     recordsFiltered: response.recordsFiltered, 
     data: response.data 
}); 

from controller?什么对象和什么方法更新分页?

回答

2

好吧,最后我找到了解决方案。首先,在标记添加DT-实例:

<div ng-controller="DataTableController as listTable" ng-init="init('informsystem')"> 
    <table datatable="" dt-options="listTable.dtOptions" dt-instance="listTable.dtInstance" class="row-border hover"> 

在控制器声明dtInstance变量和初始化它。此外,让所有Ajax回调逻辑分离的功能,并传递它dtoptions和过滤器:

var vm = this; 
vm.dtInstance = {}; //MUST BE INITIALIZED! DON'T FORGET vm.(this) before varName 

     var ajaxCallback = function(data, callback, settings) { 
      $scope.filter.start = data.start; 
      $scope.filter.length = data.length; 
      console.log($scope.filter); 
      EntityManager.get($scope.filter).$promise.then(function(response) { 
       console.log('response'); 
       console.log(response); 
       vm.objectList = response.data; 

       callback({ 
        recordsTotal: response.recordsTotal, 
        recordsFiltered: response.recordsFiltered, 
        data: response.data 
       }); 

      }); 
     }; 

使用ajaxCallback在配置:

....withOption('ajax', ajaxCallback)..... 
中的doFilter/doSearch

$scope.doFilter = function() { 
      console.log(vm.dtInstance); 
      vm.dtInstance.changeData(ajaxCallback); 
     }; 

$ scope.filter在init中填充,使用公共参数$ resource,并在回调中添加start和length(offset)。另外,过滤器包含来自通过ng-model绑定的过滤器html输入的值。