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

时间:2015-05-21 20:41:00

标签: javascript jquery angularjs

我用几个锚点制作了一个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功能来检查控制器是否已在运行以防止其重新加载?

1 个答案:

答案 0 :(得分:1)

每次路由匹配时,该控制器实例都会运行 - 如果另一个路由具有相同的控制器则无关紧要。你肯定可以做一些不好的事情来防止同一个控制器运行,但在你的情况下它是完全没必要的,因为你可以只有一个路由和一个可选参数application

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

然后在控制器中你可以做到:

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