更新了使用 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
做一些特殊的事情,例如侦听事件、广播、观看、发射等,也完全没问题。
当在控制器上使用 '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
做一些特殊的事情,例如侦听事件、广播、观看、发射等,也完全没问题。