質問

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?

役に立ちましたか?

解決

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)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top