在 $stateChangeStart 上将 resolve 注入到 toParams

inject resolve into toParams on $stateChangeStart

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

$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 会 return object{data:undefined}。我知道解决方案有效并且应该有数据。如何正确地将解析从我的状态传递到 $stateChangeStart 然后访问它?

我已经尝试将我的数据解析手动注入到我的模块文件中,但它 return 未定义。我已尝试设置 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? 
}

您应该能够简单地将 MyModel 注入到您的 运行 函数中,并像在解析过程中读取它一样读取它。示例 运行 函数 (假设您的 getData 函数 returns 是一个承诺):

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

这就是注入的伟大之处,您只需在需要时注入即可。