最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Access $stateParams of new state in service called from resolve function with UI Router - Stack Overflow

programmeradmin3浏览0评论

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:

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?

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?

Share Improve this question edited Sep 2, 2013 at 4:40 Nafiul Islam 82.5k33 gold badges143 silver badges202 bronze badges asked Sep 2, 2013 at 3:15 nrwnrw 8192 gold badges7 silver badges22 bronze badges 4
  • You're not missing anything. Until the transition is complete, the $stateParams service doesn't have the new params. – laurelnaiad Commented Sep 2, 2013 at 3:29
  • Is there any way to access params from the new state before the transition is complete with the $state (or some other) service? – nrw Commented Sep 2, 2013 at 3:36
  • As i see in the indepth state documentation there is a sample code, that shows $stateParams being injected into the resolve hash. See wiki section Resolve github.com/angular-ui/ui-router/wiki – Chandermani Commented Sep 2, 2013 at 3:45
  • A good thought. I have read that page. As I said in my question, I am able to access $stateParams when $stateParams is injected directly into a resolve function (which is what the examples show). I'm looking for a way to access them from a service. I know I can inject $stateParams into a resolve function and pass that value to a service. Is that the best/preferred way to get the effect I want? – nrw Commented Sep 2, 2013 at 4:11
Add a comment  | 

2 Answers 2

Reset to default 11

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.

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;
});

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论