Angular -如果控制器已经运行,防止重新加载

Angular - Prevent reload of controller if already running

本文关键字:新加载 加载 如果 控制器 运行 Angular      更新时间:2023-09-26

我制作了一个带有多个锚的Angular应用。每个锚都用它的模板加载一个Angular控制器,加载什么由$routeProvider定义,代码如下:

ApioApplication.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/home',{
    templateUrl : 'systemApps/home/app.home.html',
      controller : 'ApioHomeController',
      reloadOnSearch: false
    }).when('/home/:application',{
      templateUrl : 'systemApps/home/app.home.html',
      controller : 'ApioHomeController',
      reloadOnSearch: false
    }).when('/wall',{
      templateUrl : 'systemApps/wall/app.wall.html',
      controller : 'ApioWallController',
      reloadOnSearch: false
    }).when('/events',{
      templateUrl : 'systemApps/events/app.events.html',
      controller : 'ApioEventsController',
      reloadOnSearch: false
    }).otherwise({
      redirectTo: '/home'
    });
}]);

显然没有什么奇怪的,但我看到每次我点击一个锚点,Angular都会重新加载控制器,即使它之前是加载的。
所以我的问题是:有没有一种方法可以使用$routeProvider或其他Angular功能来检查控制器是否已经在运行,以防止其重新加载?

每次路由匹配时,该控制器实例就会运行——不管另一个路由是否有相同的控制器。你当然可以做一些工作来防止相同的控制器运行,但在你的情况下,这是完全没有必要的,因为你可以只有一个路由和一个可选参数application:

.when('/home/:application?', {...})

然后在控制器中你可以输入:

.controller("ApioHomeController", function($routeParams){
   if ($routeParams.application){
     //...
   }
})