我很难让$resource服务按预期运行。我试着遵循文档和这个教程,它们似乎提供了一个完全工作的实现。然而,使用这个,我会遇到两个问题。
我的(非常基本的)实现:
$resource-service:
app.factory('User', function ($resource) {
return $resource(
'myurl/user/:id',
{id: '@_id'},
{
update: {method: 'PUT'}
}
);
});我在我的控制器里怎么叫它:
$scope.user = User.get({id:$scope.myId});
//save a new user:
$scope.user.$save(function(){location.href = '#/mainpage';});
//delete a user
$scope.user.$delete({id:$scope.myId},function(){location.href = '#/mainpage';});
//update a user
$scope.user.$update({id: user.id}, function(){location.href = '#/mainpage';});我的问题:
$delete服务指定id {id:$scope.myId}?根据以上链接,这应该是自动完成的。但是,如果我跳过这一点,删除将转到myurl/user而不是myurl/user/{myId}。$scope.user除了包含特定于用户的属性外,还包含属性$promise和resolved。如果我通过PUT将其发送到REST,则请求将被拒绝,因为后端无法将请求体解析为User-Object。
未识别的字段"$promise",未标记为可忽略的为了解决这个问题,我试图在承诺实现时提取数据:
$scope.user = User.get({id:$scope.myId});
$scope.user.$promise.then(function(data){$scope.test = data});上述代码中的$scope.test仍然包含属性$promise和resolved。如何向不包括$promise的REST发送“干净的”JSON对象?
发布于 2015-10-08 14:07:35
关于你的第一个问题:根据$resource文档
如果参数值以@为前缀,则该参数的值将从数据对象上的相应属性中提取(在调用操作方法时提供)。
因此,当调用$scope.user.$delete({id:$scope.myId}时,{id:$scope.myId}是您的数据对象。
您的paramDefaults选项{id: '@_id'}使$resource查找数据对象的'id‘=> $scope.myId的值。假设这个值是'123‘
然后将URL模板参数替换为此值,并成为myurl/user/123。
发布于 2015-10-08 13:20:07
您希望使用户(不大写)服务上的方法显式化:
app.factory('user', function ($resource) {
var User = $resource('myurl/user/:userId', {userId:'@id'});
return {
get: get
};
function get(id){
return User.get({ userId: id }).$promise;
}
});用作:
user.get($scope.myId).then(function(user){
$scope.user = user;
});https://stackoverflow.com/questions/33016945
复制相似问题