Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use $routeParams in service

I'm trying to append a query parameter to all API calls which I fetch from the URL.

factory('Post', function ($resource, $routeParams) {
    return $resource('api/posts', {customer_id: $routeParams.customerId});
})

This works the first time the Post service is used but the second time it's injected it has already been initialized and is using the first customer ID even though the URL has changed.

How do I make this work as intended?

like image 964
user2906759 Avatar asked Feb 21 '14 15:02

user2906759


1 Answers

Because services are singletons. That's why you get that behavior.

I recommend that do not inject $routeParams as the init params of a service. Instead, inject it in controllers, then call service's functions using the values in $routeParams as params.

The code may like this:

factory('Post', function ($resource) {
    return {
        doPost: function(customerId) {
            $resource('api/posts', {customer_id: customerId});
        }
    };
});

//...
//in some controller
Post.doPost($routeParams.customerId)
like image 199
Stoneboy Avatar answered Sep 28 '22 03:09

Stoneboy