я буду считать, что siteid
regionid
и может быть получен только из ответ на конечную точку входа.
Использование константы может быть не лучшей идеей здесь по очевидным причинам (т. Е. Они постоянны и не могут быть созданы в то время, когда вы хотите их создать).
Вместо этого вы можете сделать одну из нескольких вещей - простое решение, которое, вероятно, работает для многих случаев использования, было бы создание службы входа, которая завершает ваш вызов API, а затем устанавливает значение либо в сервисе, либо в другом которые можно вводить туда, где вам это нужно.
Это может выглядеть следующим образом:.
angular.module('app')
.service('loginService', function($http) {
var siteId,
regionId;
function login(username, password) {
return $http({
method: 'POST',
url: '<login endpoint here>',
headers: {
"Authorization": "Basic ",
"Content-Type": "application/x-www-form-urlencoded"
}
})
.then(function(result) {
siteId = result.siteId;
regionId = result.regionId;
});
}
);
Это делает значение, доступного для вас в любое время, что вам нужно сделать вызов API после входа в системе, однако, это не большое, так как вам нужно будет вводить loginService
в любой контроллер/услугу, которая ему нужна, и что контроллер или служба вообще не заботятся о службе входа.
Улучшенный подход к этому может заключаться в том, чтобы иметь службу API, которая выполняет http получает/устанавливает/puts/posts/whatever и к которому обращается ваш уровень доступа к данным. Внутри этой службы вы можете установить/получить siteid
и regionid
.
Это может выглядеть следующим образом:
angular.module('app')
.service('api', function($http) {
var siteId,
regionId;
var defaultHeaders = {
"Authorization": "Basic ",
"Content-Type": "application/x-www-form-urlencoded"
};
function post(url, options) {
return $http({
method: 'POST',
url: url,
headers: options.headers ? options.headers : defaultHeaders
});
}
// Other functions to perform HTTP verbs...
});
angular.module('app')
.service('loginService', function(api) {
function login(username, password) {
api.post('urlHere', options)
.then(function(result) {
api.siteId = result.siteId;
api.regionId = result.siteId;
});
}
});
Вы можете получить доступ к siteid
regionid
и где угодно.
Например:
angular.module('app')
.controller('someService', function(api) {
function doSomethingWithTheApi() {
var url = 'www.google.com/' + api.siteId + '/' + api.regionId + 'whatever-else';
return api.post(url, {});
}
);
Примечание: Приведенный выше код не является полным, но это дает очень хорошее представление о подходе вы могли бы принять, что является достаточно чистым, не слишком Hacky и легко проверяемый :)
Надеюсь, что это поможет!
'function post (url, params, options) { // Код для создания вашего сообщения здесь - не забудьте вернуть обещание. } 'означает вызов API для извлечения siteid и regionid в ответ? Что может быть параметрами в 'api.post ('urlHere', params, options)'? URL-адрес будет кратным – Slimshadddyyy
О, я имею в виду, что это может быть объект, содержащий заголовки для вашего запроса (например, 'headers: {" Authorization ":" Basic "," Content-Type ":" application/x-www- form-urlencoded "}'. Вы можете настроить его так, как вам нравится :) Я обновлю код, чтобы показать, что я имею в виду. –
Как я уже упоминал, код, который я вам предоставил, вам нужно будет отрегулировать в соответствии с вашими потребностями, но он определенно описывает общий подход к решению проблемы, с которой вы сталкиваетесь :) –