Ui-router示例配置:
header: {
templateUrl: 'header.tpl',
controller: 'HeaderCtrl'
},
sidebar: {
templateUrl: 'sidebar.tpl',
controller: 'SidebarCtrl'
},
main: {
templateUrl: 'main.tpl'
}
网站以一个只有main
视图的登录页面开头
应用程序中的所有其他页面都需要身份验证。
问题: 每次打开新路径时,都会执行HeaderCtrl和SidebarCtrl。
有没有办法让SidebarCtrl和HeaderCtrl不会在每次路线更改时重新执行?
答案 0 :(得分:3)
是。您可以通过实现嵌套状态来实现此目的。在嵌套状态的情况下,父状态 - 控制器,指令只执行一次,并且在子状态的更改中将不会再次执行它们,除非您想要强行执行它们。
对于嵌套状态,只需添加一个父状态,让我们说" app"使用模板将充当具有页眉和页脚控制器的容器 - 请参阅这些也可以是指令。以及具有ui-view的内容容器。
儿童州将会像" app.child1"," app.child2"等
请注意,子状态必须以" app。"开头,因为这是定义父子关系w.r.t的链接。 UI-路由器。
如果您使用的是命名视图,则更新子状态,其中main是视图的名称/标签。
views: { 'main@': 'settings.tpl' }
此设计将确保您的页眉和页脚控制器不会在每次状态更改时执行。