2

我第一次尝试 angular.js。我的休息服务配置如下:

get('/api/users') //returns a JSON Array with all the users
get('/api/users/:id') //returns a JSON object with the requested ID

我的角度控制器设置如下:

UserCtrl.factory('User', function($resource) {
    return $resource('/api/users/:id', { id: '@id' }, { update: { method: 'PUT' } });
});

var EditCtrl = function($scope, $location, $routeParams, User){
    var id = $routeParams._id;
    $scope.user = User.get({id: id});
};

我的问题是当我跑步时

User.get({id: id})

请求的 URL 是:

http://localhost:8080/api/users?id=389498473294

我希望它是

http://localhost:8080/api/users/389498473294

我可以使用它来做到这一点$http,但我认为.get()应该能够做到......

谢谢

4

1 回答 1

4

您使用前缀 @ 定义 id 参数的默认值,这意味着该值必须取自作为参数传递给调用的对象。在 get 调用中没有发送对象,因此 id 参数被分配了空值。作为已分配的 id 参数,您传递的值将作为查询参数附加。有关这一点的解释,请查看Usage/Param defaults 段落下的 Angular文档。声明服务的正确方式应该是:

UserCtrl.factory('User', function($resource) { return $resource('/api/users/:id', { id: '' }, { update: { method: 'PUT' } }); }) ;

于 2013-02-11T14:51:35.297 回答