Angularjs resource builds wrong resource url

2019-08-03 15:22发布

Resource:

angular.module('TicketService', ['ngResource'])
       .factory('Ticket', ['$resource', function($resource){
    var Ticket = $resource('/api/tickets/:id1/:action/:id2',
    {
        id1:'@id'
    }, 

    { 
        list: {
            method: 'GET'
        },
        listByOwner: {
            method: 'GET',
            params: {
                action:'owner',
                id1:"@id"
            }
        }
        update: {
            method: 'PUT',
            params:{}
        }
    }); 
    return ticket;
}]); 

Query:

$scope.userTickets = Ticket.listByOwner({
    id :  $rootScope.user.id
}, function(){
    //success
}, function(response){});

Result:

enter image description here

Angularjs builds a wrong url, /api/tickets but it should be /api/tickets/2/owner. Any ideas why?

1条回答
爷、活的狠高调
2楼-- · 2019-08-03 16:17

The @ indicates that angular should look for the attribute on the data object, which is the second parameter (optional) in the Ticket service methods. In the first parameter you specify the request parameters. There are two ways you can fix this:

  • Add an empty object as the first parameter
$scope.userTickets = Ticket.listByOwner({},{
  id :  $rootScope.user.id
}, function(){
  //success
}, function(response){});
  • Or rename the request parameter object key (from id to id1):
$scope.userTickets = Ticket.listByOwner({
  id1 :  $rootScope.user.id
}, function(){
  //success
}, function(response){});
查看更多
登录 后发表回答