在 ui-router 中,是否可以在嵌套视图中包含嵌套视图?

In ui-router, is it possible to have nested views within nested views?

我正在使用 ui-router 进行路由选择,并且有一个嵌套视图可以加载所选项目的一些菜单选项。我的问题是,是否可以使用 ui-router 在嵌套视图中包含嵌套视图?

此处的代码有效:

.state('settings', {
    url: '/settings',
    views: {
        '': {
            templateUrl: './templates/settings.html',
            controller: 'settingsCtrl'
        },
        'details@settings': {
           templateUrl: './templates/details.html',
           controller: 'detailCtrl' 
        }
    }
})

但是说我想加载附加到 details@settings 视图的东西。我该怎么做?我试过了

.state('settings', {
    url: '/settings',
    views: {
        '': {
            templateUrl: './templates/main/settings.html',
            controller: 'settingsCtrl'
        },
        'detail@settings': {
            url: '',
            views: {
                '': {
                    templateUrl: './templates/detail.html',
                    controller: 'detailCtrl'                            
                },
                'contact@detail@settings': {
                    templateUrl: './templates/contactpref.html'
                }
            }
        }
    }
})

我在控制台中没有收到任何关于此的错误,但它确实破坏了我原来的嵌套视图。根据我的发现,文档并不清楚这是否可能。

这是不可能的。检查:http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$stateProvider

和部分 views:

an optional map<string, object> which defined multiple views, or targets views manually/explicitly.

Examples:

Targets three named ui-views in the parent state's template

views: {
  header: {
    controller: "headerCtrl",
    templateUrl: "header.html"
  }, body: {
    controller: "bodyCtrl",
    templateUrl: "body.html"
  }, footer: {
    controller: "footCtrl",
    templateUrl: "footer.html"
  }
}

就是这样。这就是 UI-Router 将为我们看到和解决的问题。为什么没有向您提供任何错误信息?

因为 map<string, object> 的预期值为 object。它针对已知属性进行迭代 (controller, templateUrl) - 并且任何未知的都将被忽略、未使用、未找到...跳过

解决方案:

经过一些 UI-Router 的体验后,我建议:

  • 如果有一些相关的功能 - 将它们置于状态
  • 如果有更多相关的功能,但仅在某些条件下 - 将它们置于子状态。

该结构将带来很多好处,主要是:稳定的父级(不总是重新加载)和动态的子级 - 每当参数更改时将新的和新的内容放入某些 targets/anchors/ui-views 中。检查: