Question

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?

Was it helpful?

Solution

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)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top