繁体   English   中英

使用$ resource服务访问REST API

[英]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';});

我的问题:

  1. 编辑:解决了感谢安德烈·克赖恩布林。 为什么我必须为$delete服务指定ID {id:$scope.myId} 根据上面的链接,此操作应自动完成。 但是,如果我跳过此操作,则DELETE转到myurl/user而不是myurl/user/{myId}

  2. 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在上面的代码还包含属性$promiseresolved 如何将不包含$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM