使用UI路由器访问使用resolve函数调用的服务中新状态的$ stateParams

时间:2013-09-02 03:15:33

标签: javascript angularjs angular-ui angular-ui-router

有没有办法从您在解析函数中调用的服务转换到您正在转换的状态的$stateParams?使用ngRoute,您可以使用$route.current.params。正如这个最小的插件所示,服务只能看到你要离开的状态:

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

$stateParams直接注入解析函数时,我得到新的$stateParams,但值仍然落后于服务中的一条路由。

我错过了什么?

2 个答案:

答案 0 :(得分:11)

无法将传入参数注入服务本身,但您可以将其传递给服务中的功能(或者您也可以将它们分配给服务中的属性)。

this plunker显示了如何将它们传递给函数,函数又将它们存储到服务中的属性中。使用“虚拟”属性不应该伤害,但它有点难看。 :)

将参数作为resolve属性传递给控制器​​然后将它们从控制器构造函数传递给服务可能更有意义......这就是我要做的。

答案 1 :(得分:8)

在stateprovider中的解析函数

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

在您的服务中

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