【问题标题】:How to modify data fetched by ngResource and then return it?如何修改ngResource获取的数据然后返回?
【发布时间】:2016-05-08 01:55:06
【问题描述】:

我想修改(过滤)角度服务中的数组(我通过 ngResource 获得的数据),然后将修改后的数据传递给控制器​​,但由于它的异步行为,我被卡住了。

代码如下:

(function() {
'use strict';

angular.module('app').factory('Report', ['Employee', function(Employee) {

    var getReports = function(employeeId) {

        return Employee.query({}, function(employees) {
            return employees.filter(function(element) {
                return employeeId === element.managerId;
            });
        });

    };

    return {
        query: function(employee) {
            return getReports(parseInt(employee.employeeId));
        }
    };

  }]);
}());

我在控制器中这样调用它:

$scope.employees = Report.query({employeeId: $routeParams.employeeId});

上面的代码有两个问题:

  1. 它不起作用 :) getReports() 返回整个员工数组,不进行过滤,
  2. 它看起来不像优雅或可维护的设计。在这方面我可以改进什么?

【问题讨论】:

    标签: angularjs angular-resource


    【解决方案1】:

    如果您需要不同类型的过滤器,您可以将过滤器函数作为参数传递:

    return {
        query: function(employee, filterFunction) {
            return getReports(parseInt(employee.employeeId)).filter(filterFunction);
        }
    };
    
    
    Report.query({employeeId: $routeParams.employeeId}, function (value) {
        // extra filtering...   
    });
    

    【讨论】:

    • 感谢您的回复,但它给了我 TypeError: getReports(...).then is not a function
    • 你是对的我只是注意到你没有依赖承诺。
    • 我可以,但我似乎无法真正理解承诺。如果你能给我一些推荐的学习资源,那会很有帮助。
    • 由于您使用的是ngResource,因此将自定义过滤器函数指定为参数可能是最简单的方法。如需承诺指南,请尝试此处:dwmkerr.com/promises-in-angularjs-the-definitive-guide
    猜你喜欢
    • 1970-01-01
    • 2020-08-19
    • 2018-12-06
    • 2020-09-26
    • 2016-02-01
    • 1970-01-01
    • 2012-02-25
    • 2021-02-04
    • 1970-01-01
    相关资源
    最近更新 更多