2013-09-28 66 views
0

我有三个服务于我的角度服务模块,我把Restangular setBaseUrl在运行中搞砸了吗?

Restangular.setBaseUrl(api_url); 

在我的每一个具有不同的api_url服务的,我希望用不同的URL不同的服务;

但是当我发布到其中一个服务说api_url = a/v1/c /时,我得到的是发布到api_url = b/v1/c;

我认为这个问题是setBaseUrl部分,例如:

factory.Aservice = function(Restangular){ 
    Restangular.setBaseUrl('/a/v1'); 

    var alist= Restangular.all('c/'); 

    return { 
     createA:function(){ 
      alist.post(data) 
     } 
    } 
} 

factory.Bservice = function(Restangular){ 
    Restangular.setBaseUrl('/b/v1'); 

    var blist= Restangular.all('d/'); 

    return { 
     createB:function(){ 
      blist.post(data) 
     } 
    } 
} 

当我打电话Aservice.createA(),后置的URL是 '/ B/V1/C',这是不对的。

有什么想法为什么?

回答

2

您似乎无法理解服务的范围。 Angular以懒惰加载的方式实例化服务。由于两个你的服务在同Restangular操作,这是正常的哪个服务加载的最后,是一个将覆盖restangular配置最后:

http://plnkr.co/edit/o974TqeunG9DGQONRNDT?p=preview

我创建了一个Plunkr这说明。

还创建了一个Plunkr,它显示了正确的方法来做到这一点。

http://plnkr.co/edit/XYEQpLZaRAjxNUImCJMP?p=preview

+0

哦,这是令人困惑的。所以我应该注入服务? – paynestrike

+0

不,你不应该依赖注射顺序。您应该确保每个服务调用都经过相应的Restangular配置,如第二个plunkr所示。 –

+0

真的很好,它完美的工作。谢谢你soooooooo了。 – paynestrike

1

您也可以使用不同的配置,对每个服务如下解释:https://github.com/mgonto/restangular#how-to-create-a-restangular-service-with-a-different-configuration-from-the-global-one

app.factory('ServiceA', function(Restangular) { 
    return Restangular.withConfig(function(RestangularConfigurer) { 
    // service has different address from serviceB 
    RestangularConfigurer.setBaseUrl('http://service-a.example.com/a/v1'); 
    }); 
}); 

app.factory('ServiceB', function(Restangular) { 
    return Restangular.withConfig(function(RestangularConfigurer) { 
    // service has different address from serviceA 
    RestangularConfigurer.setBaseUrl('http://service-b.example.com/b/v1'); 
    }); 
});