0

我的角度服务模块中有三项服务,我把

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() 时,post url 是'/b/v1/c',这是错误的。

知道为什么吗?

4

2 回答 2

2

您似乎不了解服务的范围。Angular 以延迟加载的方式实例化服务。由于您的两个服务都在同一个 Restangular 上运行,因此无论最后加载的哪个服务都是最后一个覆盖 restangular 配置的服务,这是正常的:

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

我创建了一个 Plunkr 来说明这一点。

还创建了一个 Plunkr,它显示了正确的方法。

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

于 2013-09-28T09:26:42.097 回答
1

您还可以对每个服务使用单独的配置,如下所述:https ://github.com/mgonto/restangular#how-to-create-a-restangular-service-with-a-different-configuration-from-the-global -一

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');
  });
});
于 2014-05-01T21:38:34.850 回答