[英]Access REST API with $resource service
我正在努力使$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}
? 根据上面的链接,此操作应自动完成。 但是,如果我跳过此操作,则DELETE转到myurl/user
而不是myurl/user/{myId}
。
GET返回一个$scope.user
,因此$scope.user
包含用户特定的属性外, $scope.user
包含$promise
属性和已resolved
属性。 如果我通过PUT将其发送到我的REST API,则该请求将被拒绝,因为后端无法将请求主体解析为User
-Object。
无法识别的字段“ $ promise”,未标记为可忽略
为了解决这个问题,我尝试在诺言实现时提取数据:
$scope.user = User.get({id:$scope.myId});
$scope.user.$promise.then(function(data){$scope.test = data});
在$scope.test
在上面的代码还包含属性$promise
和resolved
。 如何将不包含$promise
的“干净” JSON对象发送到我的REST API?
关于您的第一个问题:根据$ resource的文档 :
如果参数值以@开头,则将从数据对象上的相应属性中提取该参数的值(在调用操作方法时提供)
因此,当调用$scope.user.$delete({id:$scope.myId}
{id:$scope.myId}
是您的数据对象时。
您的paramDefaults选项{id: '@_id'}
使$ resource在数据对象中查找'id'=> $ scope.myId的值。 假设此值为“ 123”
然后,URL模板参数将替换为此值,并成为myurl/user/123
您想使用户(不大写)服务上的方法明确:
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;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.