首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用$resource服务访问REST

使用$resource服务访问REST
EN

Stack Overflow用户
提问于 2015-10-08 13:14:49
回答 2查看 211关注 0票数 0

我很难让$resource服务按预期运行。我试着遵循文档和这个教程,它们似乎提供了一个完全工作的实现。然而,使用这个,我会遇到两个问题。

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

$resource-service:

代码语言:javascript
运行
复制
app.factory('User', function ($resource) {
return $resource(
        'myurl/user/:id', 
        {id: '@_id'}, 
        {
            update: {method: 'PUT'}
        }
       );
});

我在我的控制器里怎么叫它:

代码语言:javascript
运行
复制
$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. 编辑:由于andrekreien异能解决了。为什么我必须为$delete服务指定id {id:$scope.myId}?根据以上链接,这应该是自动完成的。但是,如果我跳过这一点,删除将转到myurl/user而不是myurl/user/{myId}
  2. GET返回一个承诺,因此$scope.user除了包含特定于用户的属性外,还包含属性$promiseresolved。如果我通过PUT将其发送到REST,则请求将被拒绝,因为后端无法将请求体解析为User-Object。 未识别的字段"$promise",未标记为可忽略的

为了解决这个问题,我试图在承诺实现时提取数据:

代码语言:javascript
运行
复制
$scope.user = User.get({id:$scope.myId});
$scope.user.$promise.then(function(data){$scope.test = data});

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

EN

回答 2

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2015-10-08 13:20:07

您希望使用户(不大写)服务上的方法显式化:

代码语言:javascript
运行
复制
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;
    }
});

用作:

代码语言:javascript
运行
复制
user.get($scope.myId).then(function(user){
    $scope.user = user;
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33016945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档