在angularjs服务中使用全局变量

时间:2015-08-04 13:02:55

标签: javascript jquery angularjs angular-services

我必须在角度服务中使用全局变量。

我有从父应用程序获取会话ID的功能。像这样

var sessionID;

function AddSessionID(e) {
    sessionId = e;
}

这是我用于获取sessionid的函数,这个函数在父app中调用。

我需要在角度服务中使用此会话ID(sessionID)作为参数。

这是我的服务电话

(function () {
    "use strict";

    mApp.service('compasService', ['$http', '$q', function ($http, $q) {

    //Public API
    return {
        initialLayout: initialLayout
    };

    function initialLayout() {
        var dataObj = {};
        dataObj.command = 'getLayoutCstics';
        dataObj.sessionID = sessionId;
        dataObj.userid = userID;
        var transform = function (data) {
            return $.param(dataObj);
        },
        request = $http({
            method: "POST",
            url: myURL,
            //params:For passing via query string
            transformRequest: transform,
            dataType: "text",
            //To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
            },
            crossDomain: true
        });

        return (request.then(successHandler, erroHandler));
    }

})();

请给我一个正确的方法来获得它。

1 个答案:

答案 0 :(得分:1)

从架构上讲,如果必须使用全局变量,则需要限制必须使用全局上下文的位置。在这种情况下,您可能会受益于Angular中的sessionService,它封装了对会话ID的访问权。

(function(global) {
    'use strict';

    mApp.service("sessionService", function() {
        return {
            getSessionID: function() {
                return global.sessionId;
            },
            getUserID: function() {
                return global.userID;
            }
        };
    });
}(this));

然后,您可以将其指定为其他Angular服务中的依赖项:

(function () {
    "use strict";

    mApp.service('compasService', ['$http', '$q', 'sessionService', function ($http, $q, sessionService) {

    //Public API
    return {
        initialLayout: initialLayout
    };

    function initialLayout() {
        var dataObj = {
                command: 'getLayoutCstics',
                sessionID: sessionService.getSessionID(),
                userId: sessionService.getUserID()
            },
            transform = function (data) {
                return $.param(dataObj);
            },
            request = $http({
                method: "POST",
                url: myURL,
                //params:For passing via query string
                transformRequest: transform,
                dataType: "text",
                //To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
                },
                crossDomain: true
            });

        return (request.then(successHandler, erroHandler));
    }

})();

successHandlererroHandler似乎也是全局函数。第二个函数erroHandler似乎拼写错误,应该是errorHandler(注意“H”之前的“r”),但我不知道拼写是否是实际问题。

重点是在一个或多个服务中封装对全局变量的访问,因此限制在其他服务,模块和控制器中使用全局变量。