【问题标题】:Global ngResource base全球ng资源库
【发布时间】:2016-01-29 02:17:03
【问题描述】:

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

1) 授权:Bearer token (header)(登录后需要)
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
            }),
    }
]);

【问题讨论】:

标签: angularjs ngresource


【解决方案1】:

在你的工厂中加入修饰函数:

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 的全部功能,可以在返回之前随意修改配置对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多