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

Updated way to destroy a controller using the as and this syntax

当在控制器上使用 'as' 语法和绑定值时,是否有新的方法来销毁控制器,或者我是否仍应使用范围?

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

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

并且你使用 'this' 语法将事物绑定到控制器而不是范围,你如何确保控制器被销毁?

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

这会造成内存泄漏,我的控制器不会被清理,因为 pubsub 持有对我的控制器的引用。

有没有办法为我的控制器创建销毁函数,或者我仍然使用作用域对象来监听销毁事件?

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

即使使用 controllerAs 语法,使用 $scope 做一些特殊的事情,例如侦听事件、广播、观看、发射等,也完全没问题。