使用ui-router将依赖注入onEnter回调状态更改

时间:2017-03-19 21:30:44

标签: angularjs angular-ui-router

在Angular JS中使用ui-router时,可以在onEnter回调中注入哪些依赖项?具体来说,我想使用$ http服务和父模块中定义的常量。我正在使用的代码定义了模块配置中的ui-router状态;我知道我不能在配置代码中使用服务,但也许可以在配置代码定义的回调中使用它们?无论如何,以下代码似乎有效;我只是担心它可能不可靠。我猜 真正的问题是,什么时候注入依赖?这是在定义函数时还是在调用函数时发生的?

angular.module('sim', ['ui-router']).
    constant('ENV', {
        BASE_URL: '/simulation/secure'
    }).
    config(config);

function config($stateProvider) {
    $stateProvider
        .state('root.training', {
            url: '/training', 
            controller: 'trainingCtrl', 
            onEnter: function($http,ENV)
            {
                $http.get(ENV.BASE_URL + '/setIsRunning');
            }
        });
};

1 个答案:

答案 0 :(得分:0)

调用函数时会注入依赖项。查看source code of ui-router时,在状态转换期间调用onEnter - 回调,此时转换正在考虑entering。调用onEnter - 回调是使用Angulars $injector.invoke()函数完成的,该函数根据angular documentation解析$injector中的所有依赖项并调用该方法。因此,任何依赖都应该在onEnter中使用。