Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs ui路由器,无需在每次路由更改时执行控制器_Angularjs_Angular Ui Router - Fatal编程技术网

Angularjs ui路由器,无需在每次路由更改时执行控制器

Angularjs ui路由器,无需在每次路由更改时执行控制器,angularjs,angular-ui-router,Angularjs,Angular Ui Router,Ui路由器示例配置: header: { templateUrl: 'header.tpl', controller: 'HeaderCtrl' }, sidebar: { templateUrl: 'sidebar.tpl', controller: 'SidebarCtrl' }, main: { templateUrl: 'main.tpl' } 网站以一个登录页面开始,该页面只有一个main视图。 应用程序中的所有其他页面都需要身

Ui路由器示例配置:

header: {
      templateUrl: 'header.tpl',
      controller: 'HeaderCtrl'
},
sidebar: {
      templateUrl: 'sidebar.tpl',
      controller: 'SidebarCtrl'
},
main: {
    templateUrl: 'main.tpl'
}
网站以一个登录页面开始,该页面只有一个
main
视图。
应用程序中的所有其他页面都需要身份验证

问题: 每次我打开一个新路由,HeaderCtrl和SidebarCtrl都会被执行


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

是。您可以通过实现嵌套状态来实现这一点。在嵌套状态、父状态-控制器的情况下,指令只执行一次,并且在子状态发生变化时不会再次执行指令,除非您想要强制执行它们

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

子状态将类似于“app.child1”、“app.child2”等

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

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

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

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

页眉和页脚控制器也会被继承吗?或者我应该重新定义它们吗?是的,它们将在所有子状态上继承。请更新您的答案,并说明我们需要通过
main@
引用
main
模板,否则它将不起作用。我们需要引用主状态而不是模板。我会更新。感谢UpdateEyes,但为了更新
main
模板,我们必须使用
main@