Angular.extend $resource 具有 $resource 实例的函数

Angular.extend $resource with functions for instances of $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);

我这里有两个问题:

试试这个:

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

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

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

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);