Angularjs 无法调用角度资源工厂保存方法
我使用angular resource factory创建一个资源对象,让我可以与RESTful服务器交互,如下所示。但当我启动userService时,它会给出错误 TypeError:userService不是构造函数 工厂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.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编写工厂时,一切正常。factoryreturn$resource('/app/user/:id')
,但当我添加另一个自定义方法时,如问题描述所示,它抛出错误TypeError:userService不是一个构造器。我更新了我的答案,我不知道你可以像那样新建一个资源,这让我摆脱了你遇到的实际问题。直到
var resource = $resource('/app/user/:id');
resource.prototype.getUser = function(){
return this.user;
}
return resource;