ui-router在每次路由更改时都不执行控制器

时间:2015-06-05 19:44:24

标签: angularjs angular-ui-router

Ui-router示例配置:

header: {
      templateUrl: 'header.tpl',
      controller: 'HeaderCtrl'
},
sidebar: {
      templateUrl: 'sidebar.tpl',
      controller: 'SidebarCtrl'
},
main: {
    templateUrl: 'main.tpl'
}

网站以一个只有main视图的登录页面开头 应用程序中的所有其他页面都需要身份验证。

问题: 每次打开新路径时,都会执行HeaderCtrl和SidebarCtrl。

有没有办法让SidebarCtrl和HeaderCtrl不会在每次路线更改时重新执行?

1 个答案:

答案 0 :(得分:3)

是。您可以通过实现嵌套状态来实现此目的。在嵌套状态的情况下,父状态 - 控制器,指令只执行一次,并且在子状态的更改中将不会再次执行它们,除非您想要强行执行它们。

对于嵌套状态,只需添加一个父状态,让我们说" app"使用模板将充当具有页眉和页脚控制器的容器 - 请参阅这些也可以是指令。以及具有ui-view的内容容器。

儿童州将会像" app.child1"," app.child2"等

请注意,子状态必须以" app。"开头,因为这是定义父子关系w.r.t的链接。 UI-路由器。

如果您使用的是命名视图,则更新子状态,其中main是视图的名称/标签。

views: { 'main@': 'settings.tpl' }

此设计将确保您的页眉和页脚控制器不会在每次状态更改时执行。