4

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!

1 Answer 1

9

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'}

Sign up to request clarification or add additional context in comments.

2 Comments

That works. Mind explaining why? Looking at the AngularJS tutorial they don't specify any parameter like that when passing a parameter to the get function of the resource. So why is this different?
I edited answer to add an explanation. I hope it helps. Cheers

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.