ngTable与来自Web api的数据不起作用

时间:2018-10-20 20:09:54

标签: angularjs ngtable

我正在将ngTable用于AngularJS,并从网络api获取数据。当我尝试使用表格中的过滤器时,问题就开始了。

如果我这样做,表中将填充数据,但过滤器将不起作用:

$scope.clientesTable = new NgTableParams({
            page: 1,
            count: 10
        }, {
                getData: function (params) {
                    var clientes = clientesService.getAll(baseUrl);
                    clientes.then(function (data) {
                        $scope.clientesTableData = data.data;
                    }, function (error) {
                        console.log("Error: " + error);
                    });
                }

            });

在文档中,代码是这样的:

$scope.clientesTable = new NgTableParams({
                page: 1,
                count: 10
            }, {
                    getData: function (params) {
                        var clientes = clientesService.getAll(baseUrl);
                        clientes.then(function (data) {
                              params.total(data.inlineCount);
                              return data.results;
                        }, function (error) {
                            console.log("Error: " + error);
                        });
                    }

                });

这样做,我看不到前端的数据。如果要在clientesTable中查找数据:

enter image description here

编辑: 来自Web API的响应: enter image description here

2 个答案:

答案 0 :(得分:1)

您必须在getData方法中的return之前提供clientes.then()关键字。

答案 1 :(得分:0)

如果我看这个答案https://stackoverflow.com/a/29629034/3177115,就会发现NgTableParams的用法不同。您需要将其与promise一起使用,promise会将数据返回到NgTableParams对象。

$scope.tableParams = new ngTableParams({
            page: 1, count: 5,
        }, {
            getData: function ($defer, params) {
                $http.get(testUrl, { params: params })
                     .then(function(res) {
                        $defer.resolve(res.data.items);
                    }, function(reason) {
                        $defer.reject();
                    }
                );
            },
        });

有关详细信息,请参见完整的示例。为使您更好地理解,我对示例进行了一些简化。

编辑:

我认为ng-tables的API已更改-它不再期望延迟。 现在再次查看您的第一个代码示例(您说它可以工作),我明白了过滤器为何不起作用的原因:您没有将过滤器信息传递回服务。

ng-table文档说:http://ng-table.com/#/filtering/demo-filtering-basic

  

有一个getData函数吗?在这种情况下,您需要应用值   从NgTableParams.filters()到要显示在您的数据中的数据   表。当从中获取数据时通常是这种情况   服务器

我不知道您的服务,但是可以将过滤器参数添加到服务调用中吗?

var clientes = clientesService.getAll(baseUrl, params._params)

顺便说一句:ng-table的文档是一场噩梦-所有示例都相互继承并使用指令和注入。