Angular.extend $ resource,包含$ resource

时间:2015-10-02 13:35:45

标签: angularjs extend angular-resource

我想创建一个$ saveOrUpdate函数,该函数将接受成功回调,我想在我的$ resource服务的实例上使用该函数,而不是扩展服务本身。

所以,如果我想扩展服务,我只需按照以下几点写一些内容:

angular
    .module('company-registry.company')
    .factory('Company', Company);

Company.$inject = ['$resource'];
function Company($resource) {
    var companyService = $resource("https://api.mongolab.com/api...", { update: { method: 'PUT' } });

    angular.extend(companyService, {
        saveOrUpdate: function(company, successCallback) {...}
    });
    return companyService;
}

这会在实际服务上创建saveOrUpdate函数,但我想要的是使用以下代码:

var company = new Company();
company.$saveOrUpdate(cb);

我在这里有两个问题:

  • 因为我的$ saveOrUpdate方法必须在我公司调用$ save或$ update,我该如何引用调用该函数的对象?

  • 如何扩展我服务实例的可用方法?

1 个答案:

答案 0 :(得分:0)

试试这个:

function Company($resource) {
    var companyService = $resource("https://api.mongolab.com/api...", { update: { method: 'PUT' } });

    return angular.extend({
       "$saveOrUpdate":function(cb){
           ...
        }
     }, companyService);
}

修改:根据评论进行的更改。请查看此Fiddle。这更有意义吗? extend方法中对象的顺序很重要。取决于您是要向现有对象添加新属性还是通过扩展另一个属性来创建新属性。您可以使用Company自我引用this,如示例所示。

return angular.extend({
        hello: function (text) {
            console.log(text);
            return text + " - OK";
        },
        saveOrUpdate: function (successCallback) {
            var response = this.hello("Foo Bar!");
            return successCallback(response);
        }
    }, companyService);