我正在开发一个应用程序,我必须从详细信息页面向主页面插入后导航链接。两种视图的控制器都不同。我正在使用$location.path('/')
导航回主页面。问题是,当我通过点击此链接向后导航时,我的主页面控制器被重新初始化,这不是预期的行为。有没有办法防止在路由回同一链路时重新初始化控制器。
答案 0 :(得分:5)
我假设您正在使用AngularJS内置路由模块。如果有问题的控制器与路线相关联,那么只要路线与新位置匹配,它就会被初始化。你无法避免它。如果您不希望多次创建控制器,则应在视图层次结构中将其定义为高位。例如,主页的结构可能是这样的。
<html>
...
<body>
<div ng-controller="SharedController">
...
<ng-view></ng-view>
...
</div>
</body>
</html>
此处,SharedController
只会被实例化一次,无论用户导航到哪个位置。您可以将ng-view
移到div
所占用的SharedController
之外,但这会阻止范围继承工作,即ng-view
内的范围不会原型地从注入SharedController
的范围继承{1}}。
另一种选择是使用第三方库ui-router
,它引入了嵌套状态的概念。有了它,你可以用一个控制器构建一个父状态,当用户访问不同的子状态时,该控制器只被实例化一次。
答案 1 :(得分:0)
由于我的角度项目中有多个应用程序,因此我很难实现上面发布的答案,因为我的层次结构中的ng-view决定了向用户显示哪个应用程序。因此,解决方案是将数据存储在服务中。在应用程序中导航时,服务不会重新实例化,因此数据保持不变。
内部控制器,
// Check if data is present in service
if (service.dataModel && service.dataModel.data) {
// insert data in scope variables here
}
else {
// fetch data from server and add data model to service.
}