2014-12-05 5 views
8

La mia applicazione $ HTTP molte volte come questo:Come posso modificare l'URL di base di una chiamata HTTP AngularJS? chiama

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

Il this.url è sempre impostato a qualcosa come/app/getdata

Ora ho spostato il back-end della mia candidatura ad un altro server e ho bisogno di ottenere i dati in questo modo:

https://newserver.com/app/getdata 

c'è un modo che io possa fornire un URL di base che verrà utilizzato per tutte le chiamate http $?

+1

Imposta il tuo baseurl da qualche parte in app.js e utilizzare 'baseurl + this.url' ovunque necessario. Qualcosa come 'var baseUrl =" newserver.com/";'. –

+2

Se il tuo back-end si trova su un server diverso rispetto all'app angolare, potresti anche utilizzare l'intestazione Access-Control-Allow-Origin. Vedi https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS – StrangeLoop

+0

Potresti vedere Restangular: lì puoi cambiare base_url con un metodo. http://compassinhand.com/2015/08/05/multiple-restangular-api-base-urls-made-easy/ – cyan

risposta

1

tendo a tenere i miei urls vicino a dove sono necessari. Quindi se ho un servizio, manterrò l'URL di base lì; In questo modo: this.rootUrl = '/api/v1/';

Ciò mi consente di disporre di metodi contestuali aggiuntivi che "estendono" l'URL.

Ad esempio:

this.getBaseUrl = function(client_id, project_id) { 
    return this.rootUrl + 'clients/' + client_id + '/projects/' + project_id + '/'; 
}; 

cui posso quindi utilizzare in questo modo:

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

o come questo (entro lo stesso servizio):

this.closeActivity = function(activity_id, callback){ 
    $http.get(this.rootUrl + 'close_activity/' + activity_id) 
     .success(callback) 
     .error(this.handlerError); 
}; 

-harold

7

Di solito mantengo le impostazioni con costanti angolari e le inserisco nei servizi.

-1

set baseurl in $rootScope:

app.run(function($rootScope) { 
    $rootScope.baseUrl = "https://newserver.com"; 
}); 

aggiungono $rootScope nel controller del vostro app:

app.controller('Controller', ['$rootScope', function($rootScope){ 
    ... 

this.$http({ 
    method: this.method, 
    url: $rootScope.baseUrl + this.url 
}) 
+8

Questo è un design molto povero. Allega la configurazione condivisa a un oggetto che espone centinaia di problemi non correlati. Almeno usa 'app.value ('baseUrl', 'https://newserver.com');' e lo inietti. –

15

Ho trovato un alte soluzione rnative invece di <base> tag: scritto in CoffeeScript

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

Questo tipo di approccio è molto più allettante per me. Preferirei l'intercettazione di molte costanti di iniezione nei miei servizi. –

Problemi correlati