我必须在角度服务中使用全局变量。
我有从父应用程序获取会话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));
}
})();
请给我一个正确的方法来获得它。
答案 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));
}
})();
successHandler
和erroHandler
似乎也是全局函数。第二个函数erroHandler
似乎拼写错误,应该是errorHandler
(注意“H”之前的“r”),但我不知道拼写是否是实际问题。
重点是在一个或多个服务中封装对全局变量的访问,因此限制在其他服务,模块和控制器中使用全局变量。