在$ stateChangeStart上注入解析为toParams

时间:2015-10-21 10:19:14

标签: angularjs angular-ui-router state resolve

我有一个配置文件,其中包含如下所示的状态:

$stateProvider.state('home', {
    url: '?data',
    abstract: true,
    resolve: {
        data: ['MyModel', '$stateParams', function (MyModel, $stateParams) {
            return MyModel.getData($stateParams);
        }]
    }
});

然后是一个如下所示的模块文件:

App.module.run(['$rootScope', '$state', function ($rootScope, $state) {
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams) {

toParams将返回object{data:undefined}。我知道解决方案有效,应该有数据。如何正确地将解决方案从我的状态传递到$stateChangeStart然后访问它?

我尝试将我的数据解析手动注入我的模块文件,但它返回undefined。我已尝试设置params属性,看看是否可行:

resolve: {
        data: ['MyModel', '$stateParams', function (MyModel, $stateParams) {
            return MyModel.getData($stateParams);
        }]
    },
params: { 
    'foo':'bar', // this would be available in toParams 
    'data': //can i put my data here? 
}

1 个答案:

答案 0 :(得分:1)

您应该只需将MyModel注入您的运行功能,并按照您在解决过程中阅读它的方式阅读它。示例运行函数(假设您的getData函数返回一个承诺)

App.module.run(function($rootScope, MyModel) {
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
        // get the same data your resolve is using (you can also pass in toParams or the like)
        MyModel.getData(toParams).then(function(data){
            // do something with your data here inside $stateChangeStart
        });
    });
});

这就是使注射变得更好的原因,你只需要在使用它时注入一些东西。