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

nrw*_*nrw 12 javascript angularjs angular-ui angular-ui-router

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

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

我得到新$stateParams$stateParams直接注入下决心功能,但数值仍落后于服务的一个途径.

我错过了什么?

lau*_*iad 11

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

这个plunker展示了如何将它们传递给一个函数,该函数又将它们存储到服务中的属性中.使用"虚拟"属性不应该伤害,但它有点难看.:)

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


Wil*_*ilt 8

在stateprovider中的解析函数中

resolve: {
    something: function(MyService, $stateParams){
        return MyService.doSomethingWithParam($stateParams.someParameter);
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的服务中

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;
});
Run Code Online (Sandbox Code Playgroud)

  • @pilau,如果使用`ng-annotate`,缩小就没有问题. (2认同)