Angularjs 工厂$resource中的公共响应

Angularjs 工厂$resource中的公共响应,angularjs,angular-resource,angular-http,Angularjs,Angular Resource,Angular Http,我们使用工厂与一系列围绕公共实体的定制API进行交互。然而,我需要做的部分工作是评估在报头中发送回来的自定义响应,看起来他们这样做的方式是使用transformResponse。我所做的似乎是有效的,但我确实在每个定义中一遍又一遍地重复同样的事情。我试图创建一个函数使其可重用,但引用似乎失败了。我做错了什么 (function() { 'use strict'; angular.module('aumBills', ['ngResource']) .factory('B

我们使用工厂与一系列围绕公共实体的定制API进行交互。然而,我需要做的部分工作是评估在报头中发送回来的自定义响应,看起来他们这样做的方式是使用transformResponse。我所做的似乎是有效的,但我确实在每个定义中一遍又一遍地重复同样的事情。我试图创建一个函数使其可重用,但引用似乎失败了。我做错了什么

(function()
{
    'use strict';

    angular.module('aumBills', ['ngResource'])
    .factory('Bills', ['$resource',  
    function($resource)
    {
        return $resource(
        '/ua_aumcore/bills/api/v1/bills/:billableEventI',
        {
            billableEventI:'@billableEventI'
        },
        {
            getList:
            {
                method: 'GET',
                isArray: false,
                transformResponse: function(data, header, status, config, statusText)
                {
                    var response = {};
                    if (isJson(data))
                    {
                        data = angular.fromJson(data);
                        response.data = data;
                    }
                    response.status = status;
                    response.config = config;
                    response.statusText = statusText;
                    return response;
                },
                url: '/ua_aumcore/bills/api/v1/bills/query/'
            },
            getParties:
            {
                method: 'GET',
                isArray: false,
                transformResponse: function(data, header, status, config, statusText)
                {
                    var response = {};
                    if (isJson(data))
                    {
                        data = angular.fromJson(data);
                        response.data = data;
                    }
                    response.status = status;
                    response.config = config;
                    response.statusText = statusText;
                    return response;
                },
                url: '/ua_aumcore/bills/api/v1/customer/billParties/?partySites=:partySiteIDs', 
                params: {partySiteIDs: '@partySiteIDs'}
            }
            //plus about 12 more after this         
        });
    }]);

    function isJson(str)
    {
        try
        {
            JSON.parse(str);
        }
        catch (e)
        {
            return false;
        }
        return true;
    }
})();
破解的代码看起来和上面的一样,只是我说:

transformResponse: transResp(data, header, status, config, statusText),
在每个定义中,这是紧跟在isJSON之后的函数:

function transResp(data, header, status, config, statusText)
    {
        var response = {};
        if (isJson(data))
        {
            data = angular.fromJson(data);
            response.data = data;
        }
        response.status = status;
        response.config = config;
        response.statusText = statusText;
        return response;
    }

它看起来像是定义了我想用作变量的transformResponse函数,并将该变量插入到定义中:

(function()
{
    'use strict';

    angular.module('aumBills', ['ngResource'])
    .factory('Bills', ['$resource',
    function($resource)
    {
        var transResp = function(data, header, status, config, statusText)
        {
            var response = {};
            if (isJson(data))
            {
                data = angular.fromJson(data);
                response.data = data;
            }
            response.status = status;
            response.config = config;
            response.statusText = statusText;
            return response;
        };

        return $resource(
        '/ua_aumcore/bills/api/v1/bills/:billableEventI',
        {
            billableEventI:'@billableEventI'
        },
        {
            get:
            {
                method: 'GET',
                isArray: false,
                transformResponse: transResp,
                url: '/ua_aumcore/bills/api/v1/bills/:billableEventI'
            },
            getList:
            {
                method: 'GET',
                isArray: false,
                transformResponse: transResp,
                url: '/ua_aumcore/bills/api/v1/bills/query/'
            }
            //and so on and so forth
        });
    }]);

    function isJson(str)
    {
        try
        {
            JSON.parse(str);
        }
        catch (e)
        {
            return false;
        }
        return true;
    }
})();

显示失败的代码。除非我们看到你做了什么,否则我们无法告诉你你做错了什么。添加了代码。它只是函数调用的简单替换。控制台在transformResponse的第一个定义中抛出一个“数据未定义”。