具有“根”状态的UI路由在子状态控制器之前不会解析

时间:2015-07-01 07:00:07

标签: angularjs angular-ui-router

对于我在AngularJS中工作的应用程序,我遇到以下问题:

  • 在启动应用程序之前 - 我设置了2个解析函数来从本地文件中的rest / properties加载翻译。
  • 我在应用程序的“根”状态下添加了2个解析函数
  • 我已经定义了“子状态”,它应该继承“根状态”
  • 的决心
  • 我注意到在根状态的解析功能
  • 之后,子状态的自定义函数控制器没有执行

国家定义:

app.config(function($stateProvider, $urlRouterProvider) {

$urlRouterProvider.otherwise('/app/start');

$stateProvider

    // load dependencies on state
    .state('app', {
        url: "/app",
        abstract: true,
        template: "<div class='page' ui-view></div>",
        resolve: {      
            // load properties  
            loadProperties: function(properties){
                alert('load properties');
                return properties.initProperties();
            },
            // load labels
            loadLocalization: function(localize, loadProperties){
                alert('load localization');
                return localize.initLocalizedResources();
            }
        }
    })

    // dashboard : general index
    .state('app.dashboard', {
        url: "/dashboard",
        templateUrl: "partials/dashboard/dashboard.html",
        controller: "dashboardController",            
        resolve:{
            // load workorders
            loadData: function(wkorderService){
                alert('load work orders service data');
                return wkorderService.getData(null, null);
            }
        }
    })

});

我已添加警报以检查序列,我注意到通过URL app.dashboard访问/dashboard状态警报的顺序:

  • alert('load properties');
  • alert('加载工作订单服务数据');
  • 提醒('加载本地化');

按照解决的顺序 - 最后一个警报应该在根状态的解析中执行,而不是在解决子状态之前执行。

我错过了什么...... 提前感谢您查看此问题!

1 个答案:

答案 0 :(得分:1)

基本上,更改&#39; app.dashboard&#39;陈述以下问题解决了我的问题:

// dashboard : general index
.state('app.dashboard', {
    url: "/dashboard",
    templateUrl: "partials/dashboard/dashboard.html",
    controller: "dashboardController",            
    resolve:{
        // load workorders
        loadData: function(wkorderService,loadLocalization){
            alert('load work orders service data');
            return wkorderService.getData(null, null);
        }
    }
})

我认为&root;&#39; root&#39;在解决子状态之前自动调用state。猜测它不是,因此在loadData方法构造函数中专门添加loadLocalization resolve。