我正在开发一个应用程序,我必须从详细信息页面插入一个返回导航链接到主页。两个视图的控制器是不同的。我正在使用$location.path('/')
导航回主页。问题是,当我通过单击此链接导航返回时,我的主页控制器被重新初始化,这不是预期的行为。有没有办法在路由回同一链接时防止控制器重新初始化。
问问题
2761 次
2 回答
5
我假设您正在使用 AngularJS 内置的路由模块。如果有问题的控制器与路由相关联,那么只要路由匹配新位置,它将被初始化。你无法避免它。如果您不希望多次创建控制器,则应在视图层次结构中将其定义在较高的位置。例如,主页的结构可能是这样的。
<html>
...
<body>
<div ng-controller="SharedController">
...
<ng-view></ng-view>
...
</div>
</body>
</html>
在这里,SharedController
将只实例化一次,无论用户导航到哪个位置。您可以ng-view
移到div
被. SharedController
_ng-view
SharedController
ui-router
另一种选择是使用引入嵌套状态概念的第三方库。这样,您可以使用控制器构建父状态,该控制器仅在用户访问不同的子状态时实例化一次。
于 2013-09-19T17:52:37.227 回答
0
由于我的 Angular 项目中有多个应用程序,因此很难实现上面发布的答案,因为我的 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.
}
于 2016-08-06T18:40:13.700 回答