Pregunta

In AngularJS, I'm trying to pass a parameter in a controller call to a service factory. However, I can't seem to get the parameter passed. The function always passes what I set to be the default in the service. And if I don't include the default, it doesn't pass anything.

For example, my code looks similar to:

Controller

...
Room.enter({room_id: '5'/*$scope.room_id*/}, function(return_data)
    {
        //Callback function stuff.
        ...
    }
...

Services

...
services.factory('Room', ['$resource',
    function($resource)
        {
            return $resource('/room/:room_id', {}, {
                    enter: {method: 'PUT', params:{room_id:'-1'}}
        });
    }
]);
...

This way the http resource "/room/-1" is called even though I am trying to pass 5.

If I remove the params part of the "enter" method, then "/room" is all that is called. No params are passed at all.

Any suggestions as to what I'm doing wrong? Thank you much!

¿Fue útil?

Solución

Try

services.factory('Room', ['$resource',
    function($resource)
        {
            return $resource('/room/:room_id', {}, {
                enter: {method: 'PUT', params:{room_id:'@room_id'}}
        });
    }
]);

Edit:

Your parameters are passed as an object. Therefore, '@room_id' means that the value of the room_id property of the object passed should be extracted.

Note that the names must not match. In your controller, you could as well say

Room.enter({id: '5'}...

and get the value of the parameter in your service as

..., params:{room_id:'@id'}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top