2015-08-04 3 views
-1

Я должен использовать глобальную переменную в угловом сервисе.Использовать глобальную переменную в службе angularjs

У меня есть функция для получения идентификатора сеанса из родительского приложения. например,

var sessionID; 

function AddSessionID(e) { 
    sessionId = e; 
} 

Это функция, которую я использовал для получения sessionid, и эта функция вызывается в родительском приложении.

Мне нужно использовать этот идентификатор сеанса (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

Где именно ваш идентификатор сеанса? Это услуга? –

+0

Как именно sessionID является глобальной переменной? Похоже, вы можете объявить его в пределах области действия. Кроме того, почему бы вам просто не сохранить эту переменную как часть одиночного экземпляра службы? –

+0

Я думаю, его точка зрения в том, что этот 'sessionID' уже является глобальной переменной. Значение задается в другом месте приложения вне области службы Angular JS. –

ответ

1

Архитектурно говоря, если вы должны использовать глобальные переменные, вы хотите ограничить места, которые должны использовать глобальный контекст. В этом случае вам может понадобиться sessionService в Angular, который инкапсулирует доступ к идентификатору сеанса.

(function(global) { 
    'use strict'; 

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

Затем вы можете указать, что в зависимости в ваших других угловых услуг:

(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 (обратите внимание на «r» перед «H»), хотя я не знаю, является ли орфография реальной проблемой.

Все дело в том, чтобы инкапсулировать доступ к глобальным переменным в одну или несколько служб, чтобы вы ограничили использование глобалов в других сервисах, модулях и контроллерах.

+0

Большое спасибо Грегу. Но я должен использовать одно и то же имя функции (AddSessionID), чтобы получить значение. Как использовать с тем же именем функции. Функция AddSessionID (e) { sessionId = e; } –

+0

Вы не можете использовать AddSessionID для получения значения. Исходный код для этой функции устанавливает значение. –

Смежные вопросы