Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Access $stateParams of new state in service called from resolve function with UI Router

Is there a way to access $stateParams for the state you're transitioning to from a service called in a resolve function? With ngRoute you'd use $route.current.params. As this minimal plunk shows, the service only sees the state you're leaving:

http://plnkr.co/edit/QpwgAj?p=preview

I get the new $stateParams when $stateParams is injected directly into a resolve function, but the values are still behind by one route in the service.

What am I missing?

like image 384
nrw Avatar asked Sep 02 '13 03:09

nrw


2 Answers

You can't inject the the incoming parameters into the service itself, but you can pass them to a function in the service (or you could also assign them to a property in the service).

this plunker shows how to pass them to a function, which in turns stores them to a property in the service. Using a "dummy" property shouldn't hurt, but it is a bit ugly. :)

It might make more sense to pass the parameters to the controller as a resolve property and then hand them out to a service from the controller constructor... that's what I'd do.

like image 169
laurelnaiad Avatar answered Oct 10 '22 13:10

laurelnaiad


In your resolve function in stateprovider

resolve: {
    something: function(MyService, $stateParams){
        return MyService.doSomethingWithParam($stateParams.someParameter);
    }
}

In your service

myService = angular.module('myService', [])
    .factory('MyService', function() {

        var myServiceInstance;

        myServiceInstance.doSomethingWithParam= function(param){
            //...store or do something with your state param here and return result
        };

        return myServiceInstance;
});
like image 8
Wilt Avatar answered Oct 10 '22 14:10

Wilt