使用as和this语法更新了销毁控制器的方法

时间:2015-09-30 19:10:15

标签: angularjs garbage-collection

使用' as'控制器上的语法和绑定值有一种破坏控制器的新方法,还是我还应该使用范围?

如果我使用'作为'在dom中声明一个控制器。语法:

<section ng-controller="MyController as mine">...

你使用&#39;这个&#39;将事物绑定到控制器而不是范围的语法,如何确保控制器被销毁?

myApp.controller('MyApp', ['pubsub', function (pubsub) {
  var myController = this;
  this.subject = ""
  this.myTopic = pubsub.subscribe('mytopic', function(data) {
    myController.subject = data; 
  }
}

这会造成内存泄漏,我的控制器无法清理,因为pubsub正在控制我的控制器。

有没有办法为我的控制器创建一个destroy函数,还是我仍然使用scope对象来监听destroy事件?

myApp.controller('MyApp', ['pubsub', '$scope', function (pubsub, $scope) {
...
$scope.$on("$destroy", function() {
  if (myController.myTopic) {
      myController.myTopic.unsubcribe();
      myController.myTopic = null;
  }
});

1 个答案:

答案 0 :(得分:1)

使用$scope做一些特别的事情,比如监听事件,广播,观看,发光等,即使使用controllerAs语法也是如此。