Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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 无法调用角度资源工厂保存方法_Angularjs_Angular Resource - Fatal编程技术网

Angularjs 无法调用角度资源工厂保存方法

Angularjs 无法调用角度资源工厂保存方法,angularjs,angular-resource,Angularjs,Angular Resource,我使用angular resource factory创建一个资源对象,让我可以与RESTful服务器交互,如下所示。但当我启动userService时,它会给出错误 TypeError:userService不是构造函数 工厂 angular.module('App') .factory('userService', function($resource) { var user; return $resource('/app/user/:id'),{ 'setUser':

我使用angular resource factory创建一个资源对象,让我可以与RESTful服务器交互,如下所示。但当我启动userService时,它会给出错误

TypeError:userService不是构造函数

工厂

angular.module('App')
.factory('userService', function($resource) {
   var user;

  return $resource('/app/user/:id'),{
     'setUser': function (user) {
     this.user=user;
     },

     'getUser': function () {
     return this.user;
     }
     } /// Note the full endpoint address

});
我尝试了很多方法,但无法创建对象。我的控制器代码是

控制器

            $scope.user = new userService(); 
            $scope.user.data = $scope.newUser;
            userService.save($scope.user);

我遗漏了什么?

编辑:我最初提供的答案不正确。我真的不知道你可以“新”一个资源

看起来定义资源的语法不正确,请参见此处AngularJS文档的示例:$resource

实际上,您返回的是一个资源和一个由逗号分隔的对象。 在您的情况下,您的factory userService实际上刚刚返回

{
     'setUser': function (user) {
     this.user=user;
     },

     'getUser': function () {
     return this.user;
     }
}
然后你要尝试新的方法

之所以会出现这种情况,是因为您的返回实际上是在javascript中使用“逗号”操作符来分隔实际资源和对象本身。见:

逗号运算符将计算其每个操作数并返回最后一个操作数。在本例中,您的操作是对象

我甚至不认为要设置/获取资源的属性,您可以修改资源属性

所以不是

$scope.user.$setUser({foo:'bar})

你可以这么做

`$scope.user={foo:'bar'}

如果您需要对资源进行复杂的修改,我会创建可以为您修改资源的服务/工厂

tl;博士

将您的返回更改为

返回$resource('/app/user/:id')

如果你真的想给它添加方法,你可以在原型上这样做

var resource = $resource('/app/user/:id');

resource.prototype.getUser = function(){
  return this.user;
}

return resource;

抱歉搞混了

为了使用$resource工厂的方法,我们可以创建对象并调用link中给出的save、delete等方法。当我使用相同的控制器代码factory编写工厂时,一切正常。factory
return$resource('/app/user/:id')
,但当我添加另一个自定义方法时,如问题描述所示,它抛出错误TypeError:userService不是一个构造器。我更新了我的答案,我不知道你可以像那样新建一个资源,这让我摆脱了你遇到的实际问题。直到
var resource = $resource('/app/user/:id');

resource.prototype.getUser = function(){
  return this.user;
}

return resource;