如何更改AngularJS HTTP调用的基本URL?

时间:2014-12-05 11:47:46

标签: angularjs

我的应用程序多次调用$ HTTP:

    this.$http({
        method: this.method,
        url: this.url
    })

this.url总是设置为/ app / getdata

现在我已将应用程序的后端移动到另一台服务器,我需要获取这样的数据:

https://newserver.com/app/getdata

有没有办法可以提供将用于所有$ http调用的基本网址?

4 个答案:

答案 0 :(得分:19)

我找到了替代<base>标记的替代解决方案: 用coffeescript写的

$httpProvider.interceptors.push ($q)->
  'request': (config)->
    if config.url.indexOf('/api') is 0
      config.url = BASE_URL+config.url
    config

答案 1 :(得分:7)

我通常会在角度常量中保留设置并将它们注入服务。

答案 2 :(得分:1)

我倾向于保持我的网址接近他们需要的地方。所以,如果我有服务,那么我会保留基本网址;像这样:this.rootUrl = '/api/v1/';

这允许我有额外的上下文方法来“扩展”网址。

例如:

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);
};

-harold

答案 3 :(得分:-2)

$rootScope中设置baseUrl:

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
})