【问题标题】:Angular ui-router nested viewAngular ui-router 嵌套视图
【发布时间】:2014-06-03 13:37:16
【问题描述】:

我正在尝试使用 ui-router 将嵌套视图注入到我的正常视图中。 我知道可以通过 ng-include 来实现。但是我想用ui-router来解决。

我的html如下:

<div class="row">
        <div class="col-md-12">
            <div class="panel panel-default">
                <div class="panel-heading">Project todos</div>
                <div class="panel-body">
                    <div ui-view="todos"></div>
                </div>
            </div>
        </div>
    </div>

然后在我的脚本中我得到了一个状态:

.state('project', {
   url: '/project/:projectId',
   templateUrl: 'views/project/project.html',
   controller: 'ProjectCtrl',
   views: {
      'todos': {
       templateUrl: 'views/project/todos.html'
      }
   }
})

更新 - 不可能有这样的事情吗?

.state('project', {
   url: '/project/:projectId',
   templateUrl: 'views/project/project.html',
   controller: 'ProjectCtrl',
   views: {
      'todos@project': {
         templateUrl: 'views/project/todos.html'
      }
   }
})

任何人都可以找到一个错字或什么?我已经阅读了文档。我不确定出了什么问题。

提前致谢!

【问题讨论】:

    标签: javascript angularjs angular-ui-router


    【解决方案1】:

    有一个有效的plunker,展示了我们如何让它运行

    在 index.htm 上,我们需要有 &lt;div ui-view="" &gt;&lt;/div&gt;,这是我们注入 project.html 的地方。然后我们调整状态定义,也注入嵌套视图——使用ui-view绝对命名:

      .state('project', {
        url: '/project/:projectId',
        
        views: {
          '' : {
            templateUrl: 'views.project.project.html',
            controller: 'ProjectCtrl',
          },
          'todos@project': {
            templateUrl: 'views.project.todos.html'
          }
        }
      });
    

    绝对名称todos@project,会将 todos.html 注入到 project.html 中。检查plunker

    查看:

    引用:

    ...在幕后,每个视图都被分配了一个遵循 viewname@statename 方案的绝对名称,其中 viewname 是视图指令中使用的名称,状态名称是状态的绝对名称,例如联系方式。项目。您还可以选择以绝对语法编写视图名称...

    【讨论】:

    • 在索引中,我只是根据 URL 注入视图。难道没有别的办法了吗?因为不是每个状态都有嵌套视图。只有这一个。我已经更新了我的答案。
    • 不确定是不是问题!?每个 root 状态 (可能有更多) 必须从某个地方开始。它必须被注入到一些*视图(s)中。但是这个根状态可以定义更多的视图(而不是更多的状态),就像我的例子一样。只有 一个 State "project",它针对两个视图。其中一个在 index.html 中,第二个甚至是第一个的一部分。有了它,您可以实现任何目标,只需在您想要的位置声明ui-view。我不确定我错过了什么......
    • 所以这意味着我必须在所有其他状态下创建一个“”视图..?
    • 对不起,我猜我的代码没有在浏览器中更新。现在它起作用了。谢谢!
    • 很高兴看到这一点!因为ui-router 真的是很棒的图书馆!