使用参数angular实例化工厂

时间:2014-06-17 11:38:59

标签: angularjs angularjs-service

我以这种方式使用工厂作为资源提供者

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

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

其中服务器资源为REST API提供服务器资源... 但是这个表单中有发票项目的api / invoices / {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);
一切似乎都没问题,即使在debuger中我也可以使用$ save,$ saveOrUpdate,$ update或$ remove(由服务器资源提供)等方法,但是当我调用时

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

我有错误未定义不是函数我不明白为什么?我也没有理解为什么console.log(insertedItem)会给我回复

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

我希望serverResource的实例......

所以我的问题是我做错了什么?

非常感谢您的回复

编辑:plunker http://plnkr.co/edit/VkZo5kbiNAyudb0yFPhu

1 个答案:

答案 0 :(得分:0)

您需要返回一个对象,但是返回构造函数。

return Resource更改为new Resource工厂中的serverResource

编辑:

继续发表评论,试试这个:

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