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);
我这里有两个问题:
由于我的 $saveOrUpdate 方法必须调用我公司的 $save 或 $update,我如何引用调用该函数的对象?
如何扩展服务实例上可用的方法?
试试这个:
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);
我想创建一个接受成功回调的 $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,我如何引用调用该函数的对象?
如何扩展服务实例上可用的方法?
试试这个:
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);