$scope.$on()*由于视图中的端到端绑定,当 *监听器 失去其外观时, 监听器将被自动销毁/清理
。注意,
$rootScope.$on()绑定不会发生这种情况。您还可以查看AngularJS的$
scope文档。
用几句话回答:
$scope.$on();
将被自动销毁。- 您需要
$rootScope.$on()
手动销毁。
文档说明:
范围销毁-当不再需要子范围时,子范围创建者有责任通过scope。$ destroy()API销毁它们。这样做是为了阻止$
digest调用传播到子作用域,并允许垃圾回收器回收由子作用域模型使用的内存。
如何销毁示例$rootScope.$on()
:
//bind eventvar registerScope = $rootScope.$on('someEvent', function(event) { console.log("fired");});// clean up$scope.$on('$destroy', registerScope);此plnkr将为您显示
$scope.$on()和
的不同行为
$rootScope.$on()。
通过在此插入控件中切换视图,控制器将重新绑定到您的视图。该
$rootScope.$on();事件被绑定每次切换视图时不破坏前视图的事件绑定。这样,
$rootScope.$on()听众将被堆叠/倍增。
$scope.$on()绑定不会发生这种情况,因为它将通过切换视图而被破坏(丢失DOM中的E2E绑定表示)。
注意:
$scope.$on('event');会听$scope.$broadcast('event')&$rootScope.$broadcast('event')$rootScope.$on('event');只会听$rootScope.$broadcast('event')



