Angularjs 角度ui路由状态父级和解析(嵌套解析)

Angularjs 角度ui路由状态父级和解析(嵌套解析),angularjs,angular-ui-router,Angularjs,Angular Ui Router,我有以下情况: index.html页面加载并包含:ui视图 layout.html页面包含解析服务器数据的左菜单 homepage.html使用layout.html作为其父项,但需要从服务器解析自己的数据 问题是:当我解析父对象时,子对象没有解析, 删除父解析时,子解析 你能帮我一下,让我知道我做错了什么吗 app.js $stateProvider .state('layout', { url: "", templateUrl: 'partials/

我有以下情况:

  • index.html页面加载并包含:ui视图
  • layout.html页面包含解析服务器数据的左菜单
  • homepage.html使用layout.html作为其父项,但需要从服务器解析自己的数据
  • 问题是:当我解析父对象时,子对象没有解析, 删除父解析时,子解析

    你能帮我一下,让我知道我做错了什么吗

    app.js

    $stateProvider
        .state('layout', {
            url: "",
            templateUrl: 'partials/layout.html',
            controller:'LayoutController',
            abstract:true,
            resolve : {
                result_data: function ($q,CommonService)
                {
                    return resolve_layout($q,CommonService)
                }
            }
        })
        .state('homepage', {
            url: "/homepage",
            templateUrl: 'partials/homepage.html',
            parent: 'layout',
            controller:'HomepageController',
            resolve : {
                result_data: function ($q,CommonService)
                {
                    return resolve_homepage($q,CommonService)
                }
            }
        })
    

    resolve
    功能应适用于父级和子级。有一个链接到

    两个解析都将被触发,
    ui-router
    将等待,直到它们都被执行。在孩子身上,我们可以为父母解决问题,也可以为自己解决问题。因此,我建议更改名称(但不需要),并按如下方式进行:

    .state('layout', {
        url: "",
        templateUrl: 'partials/layout.html',
        controller:'LayoutController',
        abstract:true, 
        resolve : {
            result_data: function ($q, $timeout)//,CommonService)
            {
                 //return resolve_homepage($q,CommonService)
                 var deferred = $q.defer();
                 $timeout(function(){
                    deferred.resolve("from a parent");
                 }, 500);
                return deferred.promise;
            } 
        }
    })
    .state('homepage', {
        url: "/homepage",
        templateUrl: 'partials/homepage.html',
        parent: 'layout',
        controller:'HomepageController',
        resolve : {
            result_data_child: function ($q, $timeout)//,CommonService)
            {
                 //return resolve_homepage($q,CommonService)
                 var deferred = $q.defer();
                 $timeout(function(){
                    deferred.resolve("from a child");
                 }, 500);
                return deferred.promise;
            }
        } 
    
    现在,我们有两个可用参数:
    result\u data
    result\u data\u child
    。这些可能是我们的控制器:

    .controller('LayoutController', function ($scope, $state, result_data) {
        $scope.state = $state.current;
        $scope.result_data = result_data;
    })
    .controller('HomepageController', function ($scope, $state, result_data, result_data_child) {
        $scope.state = $state.current;
        $scope.result_data_parent = result_data;
        $scope.result_data_child  = result_data_child;
    })
    

    总结。正如我们所看到的,resolve特性对这两者都有效。另外,在导航到child时,必须同时解析(父级和子级),才能允许此状态。

    是否尝试使用不同的名称命名两个解析?很高兴看到这一点;)享受ui路由导航到子级时是否可能不解析父级?