Restangular setBaseUrl在运行中搞砸了?

时间:2013-09-28 09:05:15

标签: api url angularjs service restangular

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

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()时,帖子网址为'/ b / v1 / c',这是错误的。

任何想法为什么?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分: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');
  });
});