Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Api 运行中的Restangular挫折URL出错?_Api_Url_Angularjs_Service_Restangular - Fatal编程技术网

Api 运行中的Restangular挫折URL出错?

Api 运行中的Restangular挫折URL出错?,api,url,angularjs,service,restangular,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');

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

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”,这是错误的


知道为什么吗?

你似乎不了解服务的范围界定。Angular以延迟加载的方式实例化服务。由于您的两个服务都在同一个重新启动语言上运行,所以最后加载的服务通常是最后覆盖重新启动语言配置的服务:

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

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


您似乎不了解服务的范围界定。Angular以延迟加载的方式实例化服务。由于您的两个服务都在同一个重新启动语言上运行,所以最后加载的服务通常是最后覆盖重新启动语言配置的服务:

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

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


您也可以为每个服务使用单独的配置,如下所述:


您还可以为每个服务使用单独的配置,如下所述:


哦,真让人困惑。所以我应该按顺序注入服务吗?不,你永远不应该依赖注入顺序。您应该确保每个服务调用都经过适当的重新启动配置,如第二个plunkr所示。很高兴我能帮上忙哦,真让人困惑。所以我应该按顺序注入服务吗?不,你永远不应该依赖注入顺序。您应该确保每个服务调用都经过适当的重新启动配置,如第二个plunkr所示。很高兴我能帮忙
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');
  });
});