2014-02-06 51 views
2

我正在使用AngularJS $資源工廠來訪問客戶端的REST服務。一些參數是用可選的路徑參數而不是查詢參數定義的。AngularJS資源可選路徑參數

案例1:

我打電話myUrl /應用 - :的applicationID/LIMIT-:limit.json

有:

{ 
    applicationID:"1234", 
    limit: 10 
} 

我得到的正確的URL myUrl/application-1234/limit-10.json

案例2:

我打電話myUrl /應用 - :的applicationID/LIMIT-:limit.json

有:

{ 
    applicationID:"1234" 
} 

我想要的結果URL忽略可選limit參數和崩潰到myUrl/application-1234.json

但是,我ge t是myUrl /應用-1234 /限制,以.json

*編輯 我有幾個API的類別,例如Foo1和Foo2,各有幾個端點如端點1,端點2和使用方法@ Deiter的帖子,我看不到一種方法來清楚地列出我的所有資源,而不使用臨時類別名稱,然後將它們全部綁定在一起。

MyServices.factory ('MyAPI', ['$resource', 

function ($resource) { 

    return { 

    Foo1: $resource ('', 
    {      
     application: "@applicationID", 
     limit: "@limit" 
    }, 
    {   
     endPoint1: { 
      ... 
     }, 
     endPoint2: { 
      url: "myURL/application-:applicationID/limit-:limit.json", 
      method:'GET', 
      isArray:true 
     }, 
    }),  

    Foo2: $resource ('', 
    {      
     application: "@applicationID" 
    }, 
    {   
     endPoint1: { 
      ... 
     }, 
     endPoint2: { 
      ... 
     } 
    }),    
}    
}]);  

調用示例:

MyAPI.Foo1.endPoint1 ({ application: "1", limit: 5 }); 
MyAPI.Foo2.endPoint2 ({ application: "1" }); 
+0

[可選-URL參數合angularjs資源(的可能的複製http://stackoverflow.com/questions/10382337/optional-url-parameters-in -angularjs-resource) – Dieterg

+0

我編輯了我的原始文章以顯示我當前的結構,因爲我不確定如何在您的文章中乾淨地整合該方法。 – user3279701

回答

1

你可以使用由@Dieter的評論給出的相關答案,並創建單獨的$資源,但我會建議簡單地使每個部分網址一致。通過做這一點:

1)拆除傳遞的實際值,你要使用的網址中每個變量的部分(如myUrl/1234/10

2)的靜態部分,並保持整個部件變量(例如。myUrl/:applicationID/:limit,和在application-1234 & limit-10通過)

+0

我編輯了我的原始帖子以顯示當前結構。如果我正確理解你,你建議我在字符串參數中傳遞鍵和值對,而不僅僅是值? – user3279701

+0

是的。但我也覺得'應用程序'和'限制'是相當多餘的。 –

+0

謝謝。我同意你關於網​​址的結構,但是有很多終端,它已經被部署在一個大的多平臺網站上,所以不幸的是他們不太可能改變它。 – user3279701