Как изменить базовый URL-адрес HTTP-вызова AngularJS?
мое приложение вызывает $HTTP много раз, как это:
this.$http({
method: this.method,
url: this.url
})
в этом.url-адрес всегда установлен на что-то вроде /app/getdata
теперь я переехал на заднем конце моего приложения на другой сервер и мне нужно будет получить такие данные:
https://newserver.com/app/getdata
есть ли способ, которым я могу предоставить базовый URL, который будет использоваться для всех вызовов $http?
4 ответов
Я, как правило, держать мои URL-адреса близко к тому, где они необходимы. Поэтому, если у меня есть служба, я бы сохранил базовый url-адрес там; например:this.rootUrl = '/api/v1/';
Это позволяет мне иметь дополнительные контекстные методы, которые "расширяют" url.
например:
this.getBaseUrl = function(client_id, project_id) {
return this.rootUrl + 'clients/' + client_id + '/projects/' + project_id + '/';
};
который я могу использовать следующим образом:
this.createActivity = function(client_id, project_id, activity_name, callback) {
$http.post(this.getBaseUrl(client_id, project_id) + 'activities', {activity: {name: activity_name}})
.success(callback)
.error(this.handlerError);
};
или вот так (в рамках той же службы):
this.closeActivity = function(activity_id, callback){
$http.get(this.rootUrl + 'close_activity/' + activity_id)
.success(callback)
.error(this.handlerError);
};
-Гарольд
Я нашел альтернативное решение вместо <base>
тег:
написано в coffeescript
$httpProvider.interceptors.push ($q)->
'request': (config)->
if config.url.indexOf('/api') is 0
config.url = BASE_URL+config.url
config
установить baseUrl в $rootScope
:
app.run(function($rootScope) {
$rootScope.baseUrl = "https://newserver.com";
});
добавить $rootScope
в контроллеры вашего приложения:
app.controller('Controller', ['$rootScope', function($rootScope){
...
this.$http({
method: this.method,
url: $rootScope.baseUrl + this.url
})