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

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

本文关键字:新状态 状态 stateParams 服务 访问 路由器 使用 函数调用 UI      更新时间:2023-09-26

有没有一种方法可以访问您从解析函数中调用的服务转换到的状态的$stateParams?对于ngRoute,您将使用$route.current.params。正如这个最小的plunk所示,服务只看到你要离开的状态:

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

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

我错过了什么?

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

这个plunker展示了如何将它们传递给一个函数,而函数又将它们存储到服务中的一个属性中。使用"dummy"属性应该不会有什么坏处,但它有点难看。:)

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

在状态提供者中的解析函数中

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