8

我正在开发一个应用程序,我必须从详细信息页面插入一个返回导航链接到主页。两个视图的控制器是不同的。我正在使用$location.path('/')导航回主页。问题是,当我通过单击此链接导航返回时,我的主页控制器被重新初始化,这不是预期的行为。有没有办法在路由回同一链接时防止控制器重新初始化。

4

2 回答 2

5

我假设您正在使用 AngularJS 内置的路由模块。如果有问题的控制器与路由相关联,那么只要路由匹配新位置,它将被初始化。你无法避免它。如果您不希望多次创建控制器,则应在视图层次结构中将其定义在较高的位置。例如,主页的结构可能是这样的。

<html>
...
<body>
  <div ng-controller="SharedController">
    ...
    <ng-view></ng-view>
    ...
  </div>
</body>
</html>

在这里,SharedController将只实例化一次,无论用户导航到哪个位置。您可以ng-view移到div被. SharedController_ng-viewSharedController

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 回答