Как изменить базовый 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
})