Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Angular.extend$resource,带有$resource实例的函数_Angularjs_Extend_Angular Resource - Fatal编程技术网

Angularjs Angular.extend$resource,带有$resource实例的函数

Angularjs Angular.extend$resource,带有$resource实例的函数,angularjs,extend,angular-resource,Angularjs,Extend,Angular Resource,我想创建一个$saveOrUpdate函数,它将接受一个成功回调,我想在$resource服务的实例上使用该函数,而不是扩展服务本身 因此,如果我想扩展该服务,我只需写下以下内容: angular .module('company-registry.company') .factory('Company', Company); Company.$inject = ['$resource']; function Company($resource) { var compa

我想创建一个$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,因此如何引用调用函数的对象

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

试试这个:

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

return angular.extend({
您好:函数(文本){
console.log(文本);
返回文本+“-OK”;
},
saveOrUpdate:函数(successCallback){
var response=this.hello(“Foo-Bar!”);
返回successCallback(response);
}
},公司服务);

什么是
新公司()
?我对没有提交完整代码感到遗憾,“公司”是服务的名称。我会添加完整的代码。你能解释一下吗?我不确定这是如何扩展$resource instances可用函数的,也不知道我在哪里声明应该保存或更新哪个对象。我一定是误解了前面的问题。我已经编辑了答案。这有帮助吗?除了更改angular.extend函数中参数的顺序外,这与我的代码有什么不同?我希望$saveOrUpdate方法可用的方式与$resource对象上的$save函数可用的方式相同,而不是将此函数设置为服务级别。另外,这也不能回答我如何在$saveOrUpdate方法中引用company对象。
function Company($resource) {
    var companyService = $resource("https://api.mongolab.com/api...", { update: { method: 'PUT' } });

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