【问题标题】:ngTable with data from web api not working带有来自 Web api 的数据的 ngTable 不起作用
【发布时间】:2018-10-22 15:58:27
【问题描述】:

我正在为 AngularJS 使用 ngTable 并从 Web 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中查找数据:

编辑: 来自网络 api 的响应:

【问题讨论】:

  • 能不能在clientes.then(function (data) { ...后面加一个console.log
  • @Gerfried 显示数据?
  • 是的,您是否从您的服务中收到任何数据。结构是data.data吗?
  • 是的,数据没问题。如果我将 data.data 分配给 $scope 中的 var,那么我可以在前端看到它。问题是当我像在文档中一样使用 return data.data 时。
  • @GuidoCaffa 可能你得在clientes.then()之前写一个return语句

标签: angularjs ngtable


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    $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 的文档是一场噩梦——所有样本都相互继承,并使用指令和注入。

    【讨论】:

    • 这样做我有这个错误:TypeError:“参数未定义”。我找不到为什么会出现此错误,我在代码中使用了参数,但没有遇到此问题。
    猜你喜欢
    • 2014-12-06
    • 2016-02-23
    • 1970-01-01
    • 2015-12-30
    • 2018-04-22
    • 1970-01-01
    • 2013-04-26
    • 2018-11-19
    • 1970-01-01
    相关资源
    最近更新 更多