2014-06-17 84 views
0

我以這種方式使用工廠作爲種源提供商實例化工廠參數角度

angular.module('resources.users').factory('Users', ['serverResource', function (serverResource) { 

    return serverResource('users'); 
}]); 

其中服務器資源提供了服務器資源的REST API ... 但有API,用於發票項目以這種形式/發票/ {invoice_id}/item/所以我需要在工廠構造函數中傳遞變量。

我發現,這是可以做到這樣:

angular.module('resources.invoiceItem').factory('InvoiceItem', ['serverResource', function (serverResource) { 

    return function (invoiceID) { 

     if(!angular.isNumber(invoiceID)) { 
      console.log('InvoiceID has to be number!'); 

      return null; 
     } 

     return serverResource('invoices/' + invoiceID + '/item'); 
    } 
}]); 

然後實例這樣

var insertedItem = new InvoiceItem(inserted_id); 

似乎一切都OK,甚至在debuger我可以像$ CRUD方法保存,$ saveOrUpdate,$ update或$ remove(由服務器資源提供),但當我打電話時

insertedItem.$saveOrUpdate(function(){}, function(){}, function(){}, function(){}); 

我有e rror undefined不是函數,我不明白爲什麼?我也不understad爲什麼執行console.log(insertedItem)返回我

function (data) { 
    angular.extend(this, data); 
} 

我希望serverResource的情況下...

所以我的問題是什麼,我做錯了什麼?

非常感謝任何迴應

編輯:plunker這裏http://plnkr.co/edit/VkZo5kbiNAyudb0yFPhu

+1

嘗試在小提琴重建。 – Mosho

+0

plunker添加到問題 – blazek

+0

沒有'$ saveOrUpdate'功能 –

回答

0

你需要返回一個對象,但是返回的構造函數。

更改return ResourceserverResource工廠返回new Resource

編輯:

繼續評論,試試這個:

return function() { 
     return serverResource('invoices'); 
    } 
+0

非常感謝,這工作,但不會它混亂像這個http://pastebin.com/ZMEVR1Jb簡單的資源?這似乎是問題,看到這個plunker http://plnkr.co/edit/3ypFMfN5l4JgVuNNkk02 – blazek

+0

@blazek idk你正在嘗試做什麼。你不能指望從第一個工廠返回的構造函數的行爲與從第二個工廠返回的對象相同。 – Mosho

+0

我有標準休息API的服務器資源(例如:/ invoices/- GET,POST,PUT,DELETE),但我有每個發票和API的項目就像(/ invoices/{invoiceID} /),所以我需要以某種方式將發票編號傳入休息地址,這是我api中唯一的例外情況,所有其他人都以非標準形式出現,但我不知道如何與工廠進行交易...抱歉,我的可能的錯誤解釋 – blazek