由ng-include指令创建的重复控制器

时间:2014-09-17 11:56:44

标签: angularjs

我使用ngInclude指令并定义我自己的控制器

 <ng-include
   src="'app/streaming/streaming.view.html'"
   ng-controller="StreamingCtrl"
   ng-if="streamingActive">
 </ng-include>

这是在main-page.view.html中定义的,它是我的应用程序的顶级页面,并在app.js中列出如下:

 app.config(['$routeProvider', function ($routeProvider) {
     $routeProvider.when('/', {
         templateUrl: 'app/common/main-page.view.html',
         controller: 'HomeCtrl', 
         reloadOnSearch:false
     })
     .when('/multiview', {
         templateUrl: 'app/common/main-page.view.html',
         controller: 'MultiviewCtrl'
     })
}]);

流媒体控制如下:

 app.controller('StreamingCtrl', ['$scope', function($scope) {
     console.log($scope);

      $scope.$on('destroy', function () {
          console.log('destroy');
      });
 }]);

每次我在home和multiview页面之间导航时,它看起来像是正在创建一个新的控制器实例。记录范围,每个都有一个新的id,但似乎永远不会调用destroy方法。我认为这会导致内存泄漏,同时创建新的控制器实例,而旧的控制器实例永远不会被破坏。

非常感谢任何想法

C

1 个答案:

答案 0 :(得分:1)

这是因为你拼错了毁灭事件,它应该是$destroy而不是destroy

<强> DEMO

  .controller('StreamCtrl', function($scope) {

    console.log($scope);

    $scope.$on('$destroy', function () {
      console.log('destroy');
    });

  });