angularjs - Angular ui 路由器 : Parent & Child Views

标签 angularjs angular-ui-router

我想建立一个具有以下结构的站点 header-view, main-view, footer-view 。
所以我定义了一个包含页眉和页脚的根路由。 root 的 child 将成为我所有的站点。在这些站点中,我将拥有更多的嵌套 View 。

在下面的代码中,它确实显示了页眉,但不显示页脚和主 View 。一旦我删除了父继承,它就会显示主 View 而不是页眉和页脚。

HTML

<body ng-app="App">
    <header ui-view="header"></header>
    <main ui-view></ui-view>
    <footer ui-view="footer"></footer>
</body>

JS
   module.config(function($urlRouterProvider, $stateProvider) {
      $urlRouterProvider.otherwise('/home');
      $stateProvider
        .state('root', {
          abstract: true,
          views: {
            '@': {
                controller: 'RootCtrl',
                controllerAs: 'rootCtrl'
            },
            'header@': {
                templateUrl: 'modules/header/header.html',
                controller: 'HeaderCtrl',
                controllerAs: 'headerCtrl'
            },
            'footer@': {
                templateUrl: 'modules/footer/footer.html',
                controller: 'FooterCtrl',
                controllerAs: 'footerCtrl'
                }
           }
        })
        .state('root.home',{
            parent:'root',
            url:'',
            templateUrl:'modules/home/home.html',
            controller: 'HomeController',
            controllerAs:'homeCtrl'
        });
    });

最佳答案

有一个链接到working plunker .
UI-Router如何为 View 找到目标/ anchor 的逻辑是:总是尝试插入 child进入 parent .如果不可能,则使用绝对命名。看:

View Names - Relative vs. Absolute Names

所以我改变的是,父未命名 View 现在包含 subview 的目标/ anchor - 未命名 View <ui-view /> :

.state('root', {
  abstract: true,
  views: {
    '@': {
        template: '<ui-view />', // NEW line, with a target for a child
        controller: 'RootCtrl',
        controllerAs: 'rootCtrl'
    },
    ....

另外,因为我们说,默认 url 是
  $urlRouterProvider.otherwise('/home');

我们必须有这样的状态:
.state('root.home',{
    parent:'root',
    url:'/home', // this is the otherwise, to have something on a start up

查一下 here

使用 plunker here 的另一种方法, 可能是针对 child 中的根 View :
.state('root.home',{
    parent:'root',
    url:'/home',
    views: {
      '@': {
      templateUrl:'home.html',
      controller: 'HomeController',
      controllerAs:'homeCtrl'
      }
    },

在这种情况下,父状态不必具有 <ui-view /> - 我们的目标是 root,但我们不会继承任何东西......为什么会这样?请参阅此链接:

Scope Inheritance by View Hierarchy Only

关于angularjs - Angular ui 路由器 : Parent & Child Views,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27312840/

相关文章:

javascript - 无法通过angular JS访问部署在tomcat上的spring Rest web服务

javascript - AngularJS 中具有嵌套状态的嵌套 View

javascript - Angular ui-router 无法解析 $resource 结果

javascript - 当我可以在 es6 中使用导入/导出时,angular 的依赖注入(inject)有什么优势

html - 如何从 UI-Bootstrap Angular Tab 指令中删除下边距?

javascript - AngularJS 使用 ng-repeat 显示分层数据

javascript - 在 AngularUI 路由器中访问多个 promise 数据

javascript - 在确认弹出窗口进入 Angular 4之前如何获取刚刚点击的网址

javascript - angularjs ui-view元素不呈现内容

html - angular ng-options 指令最终选择了多个项目