gpt4 book ai didi

javascript - 使用 $resource 服务访问 REST API

转载 作者:行者123 更新时间:2023-12-03 08:42:12 25 4
gpt4 key购买 nike

我正在努力让 $resource 服务按预期运行。我尝试遵循 documentation还有这个tutorial这似乎提供了一个完全有效的实现。然而使用这个我遇到了两个问题。

我的(非常基本的)实现:

$resource-服务:

app.factory('User', function ($resource) {
return $resource(
'myurl/user/:id',
{id: '@_id'},
{
update: {method: 'PUT'}
}
);
});

我如何在 Controller 中调用它:

$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';});

我的问题:

  1. 编辑:感谢 Andre Kreienbring 解决。为什么我必须为 $ 指定 id {id:$scope.myId}删除服务?根据上面的链接,这应该自动完成。但是,如果我跳过此操作,DELETE 将转到 myurl/user 而不是 myurl/user/{myId}

  2. GET 返回一个 Promise,因此 $scope.user 除了属性之外还包含属性 $promiseresolved用户特定的属性。如果我通过 PUT 将其发送到我的 REST API,则请求会被拒绝,因为后端无法将请求正文解析为 User-Object。

    Unrecognized field "$promise", not marked as ignorable

为了解决这个问题,我尝试在 promise 履行时提取数据:

$scope.user = User.get({id:$scope.myId});
$scope.user.$promise.then(function(data){$scope.test = data});

上面代码中的$scope.test仍然包含属性$promiseresolved。如何将不包含 $promise 的“干净”JSON 对象发送到我的 REST API?

最佳答案

关于你的第一个问题:根据documentation of $resource :

If the parameter value is prefixed with @ then the value for that parameter will be extracted from the corresponding property on the data object (provided when calling an action method)

因此,当调用 $scope.user.$delete({id:$scope.myId} {id:$scope.myId} 时,它是您的数据对象。

您的 paramDefaults 选项 {id: '@_id'} 使 $resource 在数据对象中查找 'id' => $scope.myId 的值。我们假设该值为“123”

URL 模板参数随后被该值替换并变为 myurl/user/123

关于javascript - 使用 $resource 服务访问 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33016945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com