在每个页面中使用嵌套视图时如何使用 ui-router 进行页面重定向?

Posted

技术标签:

【中文标题】在每个页面中使用嵌套视图时如何使用 ui-router 进行页面重定向?【英文标题】:How to do page redirection using ui-router when using nested view in each page? 【发布时间】:2016-09-02 12:59:03 【问题描述】:

我正在使用 ui-router,它适用于单页,因为我在多个子视图中破坏了我的页面,每个子视图都有自己的控制器。现在我有两个这样的页面,但无法弄清楚如何使用 ui-router 重定向到另一个页面。

$stateProvider
 .state('main', 
  url: '/',
views: 
  '': 
    templateUrl: 'index.html',
    controller: 'projectInitCtrl',
  ,
  'tab_overview': 
    templateUrl: 'assets/views/part_page.html',
    controller: 'tabOverviewCtrl',
  

)
.state('dashboard', 
url: '/dashboard',
views: 
  '': 
    templateUrl: 'main.html',
    controller: 'projectInitCtrl',
  ,
  'tab_overview': 
    templateUrl: 'assets/views/part_page_1.html',
    controller: 'tabOverviewCtrl',
  

);

$urlRouterProvider.otherwise('/');

我可以使用 localhost:9000(我正在运行我的应用程序的端口)访问/,现在如何重定向到 /dashboard?

我正在使用 angularjs。如果不使用 ui-router,是否可以建议我使用其他方法来实现这一目标?

【问题讨论】:

当你说重定向时,你的意思是改变默认状态吗? $urlRouterProvider.otherwise('/') 应该可以解决问题。 我的意思是转到另一个页面。默认状态已经存在,所以当我尝试打开 localhost:9000/#/dashboard 时,它会将我带到默认页面。 Your code works? (click to see plunker) @Dan 感谢代码,但即使在这个代码中,我们也不仅仅显示 main.html 的内容。当您单击链接时,我只想显示 main.html 的内容而不显示其他内容。我假设 main.html 正在使用 part_page_1.html 作为 ui-view。如果我的理解不正确,请告诉我。当我说重定向时,我的意思是我们完全切换到新页面而不是仅重定向页面的一部分。 嘿,我可以通过使用 ui-view="" 并根据页面更改 ui-view 来解决问题,但我真正想要的是更改完整页面,以便我可以在每个页面中使用多个 ui-view页。这样每个组件都有自己的控制器,我可以在多个页面上重用它们。 【参考方案1】:

您似乎想要一个简单的带有homedashboard 的两条路由应用程序。

你的代码是正确的,你只需要简化相应的html:

<body>
  <div ui-view=""></div>
</body>

另外,为避免出现问题,我建议不要将您的 / 路由指向 index.html,因为 index.html 应该是您的应用程序主页,并且在 ui-view 中重新加载它可能会导致奇怪的行为.

有了这两点,回家将显示index.html(按照上述点的两倍),转到仪表板将显示main.html

关键是 ui-view 标记是当您转到 /#dashboard 时显示视图的位置。

这是一个更新的plunker - 请注意,plunkers url 路由不能理想地工作,因此需要链接,否则您可以删除它们。

就目前而言,您的代码似乎期望每个 url 有两个视图,这就是为什么原始 plunker 同时具有 ui-view=""ui-view="tab_overview",并在您切换 url 时显示两行信息。

【讨论】:

谢谢丹。这解决了我目前的问题。现在我正在考虑 ui-view 内的 ui-view 以使其更加优化。 :) 您需要为此使用嵌套状态:例如dashboard.tabs_overview。这仅在页面具有多个嵌套状态时才有意义,否则没有意义 - 只需让视图具有选项卡概览即可。 同意。你知道一些链接,我可以从中学习嵌套状态(更像是 ui-view 内的 ui-view)。 quickstart 有一个link to an example。

以上是关于在每个页面中使用嵌套视图时如何使用 ui-router 进行页面重定向?的主要内容,如果未能解决你的问题,请参考以下文章

Angular ui-router - 如何访问从父模板传递的嵌套命名视图中的参数?

AngularJS UI-Router - 何时使用子/嵌套状态

使用嵌套状态作为ui-router中的选项卡

angularJs ui-router路由之多视图实现菜单缓存切换

Angularjs中使用ui-route如何异步加载组件?

重新访问状态时,UI路由器视图未刷新