【问题标题】:inject resolve into toParams on $stateChangeStart在 $stateChangeStart 上将 resolve 注入 toParams
【发布时间】:2016-01-20 07:09:01
【问题描述】:

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

$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 然后访问它?

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

【问题讨论】:

    标签: angularjs angular-ui-router state resolve


    【解决方案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
            });
        });
    });
    

    这就是注入的伟大之处,您只需在需要时注入一些东西。

    【讨论】:

    • 这不是打败了有决心的目标吗?还是我错过了什么
    • 解析的通常目的是确保在加载路由和控制器之前完成某些承诺。我不确定您为什么要在 $stateChangeStart 中解析数据,但我的解决方案有效。
    • 在我的 stateChangeStart 中,如果我的承诺得到解决,我只想允许更改路由,因为路由取决于数据。因此,如果我按照您的建议手动注入它,我不确定是否确认我的决心已经解决,如果这有意义的话。您的方法在获得我想要的数据方面确实有效。
    • 这听起来像是resolve的目的,你根本不需要使用$stateChangeStart。您只需将解析后的值注入您的控制器,但如果承诺失败,路线将不会改变。
    猜你喜欢
    • 2016-07-04
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    相关资源
    最近更新 更多