全球ngResource基础

时间:2016-01-28 16:24:11

标签: angularjs ngresource

我的角度服务中有多个工厂位于不同的js文件中。并且所有查询都有共同基础:

1)授权:不记名令牌(标题)(登录后需要)
2)AccessDateTime,UserIPAddress(登录前需要)
3)AccessDateTime,UserIPAddress,UserID(登录后需要)

现在,我发现在每个资源上重复此操作非常繁琐。我怎么能为此做一个基础?我认为这是非常常见的,但我找不到任何关于此的文档。像jquery.AjaxSetup()。

默认代码

angular.module('app.test').factory('Test', ['$resource',
    function($resource) {
        return {
            resource1: $resource(
                url: 'test1/:testId/:AccessDateTime/:UserIPAddress',
                headers: { Authorization: Bearer token},
                params: { testId: '@_id', AccessDateTime:'@AccessDateTime', UserIPAddress: '@UserIPAddress' }
            }),
            resource2:  return $resource(
                url: 'test2/:testId/:AccessDateTime',
                params: { testId: '@_id', AccessDateTime:'@AccessDateTime' }
            });
        }
    }
]);

实施基础资源后的代码(仅限插图)

angular.module('app.base').factory('FactoryBase'), ['resource',
    function($resource) {}
        if (resource need authorization) {
            auto append header, AccessDateTime, UserIPAddress
        } else if (resource do not need authorization) {
            auto append AccessDateTime
        }

        // depending on attribute set with authorize: true/false
    }
]);

angular.module('app.test').factory('Test', ['$resource',
    function($resource) {
        require('FactoryBase'),
        return {
            resource1: $resource(
                url: 'test1/:testId',
                authorize: true
            }),
            resource2: $resource(
                url: 'test2/:testId',
                authorize: false
            }),
    }
]);

1 个答案:

答案 0 :(得分:0)

在工厂中放置修改器功能:

angular.module('app.test').factory('Test', ['$resource',
    function($resource) {
        var defaultConfig1 = {
             url: 'test1/:testId/:AccessDateTime/:UserIPAddress',
             headers: { Authorization: Bearer token},
             params: { testId: '@_id', 
                       AccessDateTime:'@AccessDateTime',
                       UserIPAddress: '@UserIPAddress' 
                     }
        };
        var defaultConfig2 = {
            url: 'test2/:testId/:AccessDateTime',
            params: { testId: '@_id',
                      AccessDateTime:'@AccessDateTime'
                    }
        };
        function mod1(arg) {
            var obj = defaultConfig1;
            //modify config
            return obj;
        };
        function mod2(arg) {
            //modify and return defaultConfig
        };
        return {
            resource1: $resource(defaultConfig1),
            resource2: $resource(defaultConfig2).
            modified1: function (arg) {
                return $resource(mod1(arg));
            },
            modified2: function (arg) {
                return $resource(mod2(arg));
            }
        }
    }
]);

在返回配置对象之前,您可以充分利用JavaScript来修改配置对象。