2015-06-30 53 views
0

我正在开发的应用程序允许用户更改服务器的IP(REST API所在的位置)。这个地址存储在一个可以改变的变量中,但问题是当实例化服务时,基本URL不能被改变。在this answer之后,我能够更改某些服务的网址,但对于那些有POST操作的用户,我无法做到这一点。在AngularJS Factory中重写URL

我试过几种配置,但总是有问题。例如,这样的:

// Services file 
app.factory('Bookings', BookingsFactory) 

function BookingsFactory($resource, GlobalVariables) { 
    return $resource('http://:url/api/bookings/:id/', null, {url: '@url'}); 
} 

//Controllers file 
Bookings.save(booking, {url: GlobalVariables.IPServer}); 

抛出此错误消息 “网:: ERR_NAME_NOT_RESOLVED”,因为请求的URL是不正确的: “http://api/bookings/?end_time=2015-06-30T09:30&name=Reunion&room=1&start_time=2015-06-30T09:43&started=true”。

如果我这样称呼它:

//Services file 
app.factory('Bookings', BookingsFactory) 

function BookingsFactory($resource, GlobalVariables) { 
    return $resource('http://:url/api/bookings/:id/', {url: '@url'}); 
} 

//Controllers file 
Bookings.save({booking: booking, url: GlobalVariables.IPServer}); 

我得到一个400错误的请求错误,并且响应要求对所有必填字段内容:“这是必须填写”

我正在使用AngularJS v1.3.13。有没有办法使用这种方法在每个请求中更改基本URL,即使在POST请求中也是如此?或者甚至更好,在应用程序启动后有没有更新应用程序的每个工厂中的URL的方法?

回答

0

在我工作的应用程序中,我使用$ rootScope来为所有请求保存我的基本服务器URL。我不知道这是不是使用$ rootScope的好方法,但可以肯定的是该应用程序正在运行。

哎呀对不起,我忘了还补充说,我可以更改应用程序运行时的基本URL,这是你需要的。

+0

对不起,但这并没有为我工作。我使用的是服务,然后在控制器中注入,所以我认为这些服务在应用程序提供时实例化,因此一旦启动应用程序就无法更改。我尝试过使用rootScope,但是因为这个原因,它无法正常工作。 – spiringer88

+0

当您尝试将服务器URL作为参数发送到函数时,您知道服务可以接受参数吗? –

+0

是的,我试过了,它是在我的问题中的例子。我不知道我的问题是否与这些参数的顺序有关,因为当我执行POST请求时它崩溃了...... – spiringer88