Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 带有';根';在子状态控制器之前未解析状态_Angularjs_Angular Ui Router - Fatal编程技术网

Angularjs 带有';根';在子状态控制器之前未解析状态

Angularjs 带有';根';在子状态控制器之前未解析状态,angularjs,angular-ui-router,Angularjs,Angular Ui Router,对于我在AngularJS中开发的应用程序,我有以下问题: 在应用程序启动之前,我已经设置了2个解析函数来从本地文件加载rest/properties的翻译 我在应用程序的“根”状态中添加了2个解析函数 我已经定义了“子状态”,它应该从“根状态”继承解析 我注意到子状态上的自定义函数控制器在根状态的解析函数之后不会执行 国家定义: app.config(function($stateProvider, $urlRouterProvider) { $urlRouterProvider.oth

对于我在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);
            }
        }
    })

});
app.config(函数($stateProvider,$urlRouterProvider){
$urlRouterProvider。否则('/app/start');
$stateProvider
//加载对状态的依赖关系
.state('应用程序'{
url:“/app”,
摘要:没错,
模板:“”,
决议:{
//负载特性
loadProperties:函数(属性){
警报(“加载属性”);
返回properties.initProperties();
},
//装载标签
loadLocalization:函数(localize,loadProperties){
警报(“负载本地化”);
返回localize.initLocalizedResources();
}
}
})
//仪表板:一般索引
.state('app.dashboard'{
url:“/dashboard”,
templateUrl:“partials/dashboard/dashboard.html”,
控制器:“仪表板控制器”,
决心:{
//装载作业单
loadData:函数(wkorderService){
警报(“加载工单服务数据”);
返回wkorderService.getData(null,null);
}
}
})
});
我添加了警报以检查序列,并且在通过URL访问
应用程序仪表板
状态时,我注意到警报的顺序:

  • 警报(“加载属性”)
  • 警报(“加载工单服务数据”)
  • 警报(“负载本地化”)
按照解析顺序-最后一个警报应在根状态解析中执行,而不是在子状态解析之前执行

我是不是错过了什么。。。
提前感谢您调查此问题

基本上,将“app.dashboard”状态更改为以下状态修复了我的问题:

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

我认为“根”状态的解析是在子状态解析之前自动调用的。我猜不是,因此专门在loadData方法构造函数中添加了
loadLocalization
resolve

ui router 0.2.x一起处理整个转换的所有解析。正如您所发现的,可以使用在子状态中添加对父状态的解析的依赖来排序解析执行。在ui router 1.0中,我们添加了解析策略,该策略允许您指定是否需要该行为(“急切策略”),是否要等待状态进入(“惰性策略”),或者是否不希望解析发生在将要注入其他位置之前(“即时策略”)