Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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 ui路由器在解析父状态之前触发子状态_Angularjs_Angular Ui Router - Fatal编程技术网

Angularjs ui路由器在解析父状态之前触发子状态

Angularjs ui路由器在解析父状态之前触发子状态,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我试图在Angular ui路由器的父状态下执行一些初始化代码。初始化代码是orderService.getStoreInfo(),它返回一个承诺。只有当这个承诺得到解决时,我才想触发子状态。然而,我注意到,孩子的状态甚至在父母的承诺解决之前就被触发了。我做错了什么?这是我的代码: function configure($stateProvider, $urlRouterProvider) { $urlRouterProvider.otherwise('/'); $state

我试图在Angular ui路由器的父状态下执行一些初始化代码。初始化代码是
orderService.getStoreInfo()
,它返回一个承诺。只有当这个承诺得到解决时,我才想触发子状态。然而,我注意到,孩子的状态甚至在父母的承诺解决之前就被触发了。我做错了什么?这是我的代码:

function configure($stateProvider, $urlRouterProvider) {

    $urlRouterProvider.otherwise('/');

    $stateProvider
        .state('home', {
            abstract: true,
            template: '<ui-view/>',
            resolve: {
                storeInfo: /* @ngInject */ function(orderService) {
                    console.log('home: resolve - orderService.getStoreInfo()');
                    return orderService.getStoreInfo();
                }
            }
        })

        .state('home.orders', {
            url: '^/',
            template: '<my-order-list data-orders="vm.orders"></my-order-list>',
            resolve: {
                orders: /* @ngInject */ function (orderService) {
                    console.log('home.orders: resolve - orderService.getOrders()');
                    return orderService.getOrders();
                }
            },
            controller: ['orders', function (orders) {
                this.orders = orders;
            }],
            controllerAs: 'vm',
        });
}

这清楚地表明,即使在父状态被解析之前,子状态也会触发。

答案是:如果要在实例化子状态之前等待承诺被解析,则必须将
解析
键注入子状态。因此,只需将
storeInfo
显式注入子状态的解析函数。

据我所知,延迟解析的唯一方法是不返回承诺。您是否尝试将
storeInfo
显式注入子状态的解析函数?不确定是否有用,只是好奇。@YauheniLeichanok,这正是问题所在!我重新阅读了ui路由器文档,并清楚地声明“如果您想在实例化子级之前等待承诺得到解决,则必须将解决密钥注入子级状态。”因此,谢谢您。如果你把你的建议作为答案,我会把它标为正确答案。谢谢@纳雷什完成了!很乐意帮忙,谢谢!这正是问题所在。
home: resolve - orderService.getStoreInfo()
home.orders: resolve - orderService.getOrders()
... messages from orderService.getStoreInfo() ...