2013-09-28 94 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'); 
    }); 
});