使用分页从服务器加载角度ng-table

时间:2017-02-21 23:10:37

标签: angularjs

我试图弄清楚如何填充ng表并应用params的总值。似乎有些例子几乎显示了我正在做的事情 - 但不完全是这样,而且总数从未设定过。

$scope.tableParams = new NgTableParams({page: 1, count: 25}, 
 {
   counts: [],
   getData: function(params)
   if (CompaniesView.ViewInitialized)
     return CompaniesView.RetrieveCompanies($scope, $http, function ()
     {
        params.total($scope.RequestFilter.TotalCompanies);
        return $scope.TableParams.data;
      });
  }
 });

我的RetrieveCompanies函数检索数据 - 并在完成时调用回调函数。此时我的印象是我可以设置params.total但不起作用。我看到示例正在做类似的事情,除非他们直接执行jQuery API操作。我不知道为什么这不起作用。我想任何时候设置总数会导致表分页控件更新 - 但它似乎必须在detData调用中完成。但是如果你正在进行异步调用,我们怎么能在调用中设置总数,因为在异步完成之前它不会有数据 - 这意味着 getData调用已经完成。

可能在这里遗漏了一些概念 - 但在jQuery或角度方面我不是专家。

彼得

更新

检索公司职能

RetrieveCompanies: function (scope, http,callback)
{
        scope.IsLoading = true;

        var Data =
        {
            AuthoirzationType: TokenRetrieval.SessionAuth,
            SessionId: activeSession
        };

        var tokenRequest =

        {
            params: Data
        };

        performVeilabilityTokenRetrieval(http, tokenRequest,
        function (response)
        {
            if (true)
            {
                if (!response.HasError)
                {
                    scope.RequestFilter.State = scope.selectedState.Value
                    scope.RequestFilter.regionsearch = scope.selectedRegion.id;
                    scope.RequestFilter.checkadminStaff = scope.selectedAdmin.value;

                    //tableParams
                    scope.RequestFilter.Page = scope.tableParams.page();
                    scope.RequestFilter.PageCount = scope.tableParams.count();

                    var config =
                    {
                        headers:
                        {
                            Authorization: 'Bearer ' + response.RequestToken
                        },
                        params: scope.RequestFilter
                    }

                    http.get(CompaniesView.Companies_api_urls.loadCompaniesRequest, config)
                    .then(                    
                        function (response)
                        {                            
                            scope.RequestFilter.TotalCompanies = response.data.companieslistTotal;
                            scope.TableParams.data = response.data.companies;
                            if (callback != null) callback();                            
                        },                    
                        function (data, status, headers, config) //error
                        {
                            scope.IsLoading = false;
                        }
                    );
               }
               else
               {
                    scope.request.requestToken = null;
                    //CreateExpenseView.PrepareRESTResults(data.RestResults);
                }
            }
            else
            {
                scope.request.requestToken = null;
                scope.request.error = data.replace(/\"/g, "");
            }
        });
}

1 个答案:

答案 0 :(得分:0)

确定;终于找到了什么错。 ng-table getData操作需要返回promise。我的函数没有被配置为延迟的承诺,一旦我意识到这一点,我就为我的数据检索做了必要的修改以返回一个承诺。一个重点 - 当我用一个时间包裹我的电话时 - 我完成了一个完成 - 而getData正在运行一个当时(来自承诺)。一旦这些变化到位,分页(总)操作就会起作用。

彼得