首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全局ngResource库

全局ngResource库
EN

Stack Overflow用户
提问于 2016-01-29 00:24:11
回答 1查看 35关注 0票数 1

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

1)授权:持有者token (表头)(登录后必填)

2) AccessDateTime、UserIPAddress (登录前必填)

3) AccessDateTime、UserIPAddress、UserID (登录后必填)

现在,我发现在每个资源上重复这个过程是非常乏味的。我怎么才能为这个建立一个基础呢?我认为这是很常见的事情,但我找不到任何关于这方面的文档。类似于jquery.AjaxSetup()。

默认代码

代码语言:javascript
复制
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' }
            });
        }
    }
]);

实现基础资源后的代码(仅用于说明)

代码语言:javascript
复制
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
            }),
    }
]);
EN

回答 1

Stack Overflow用户

发布于 2016-01-29 02:17:04

将修饰符函数放入工厂:

代码语言:javascript
复制
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的全部功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35066667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档