您是否需要在$ scope $ destroy事件中取消绑定$ scope$ on?

【字号: 日期:2024-04-10浏览:43作者:雯心
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解决您是否需要在$ scope $ destroy事件中取消绑定$ scope$ on??

$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’)

解决方法

我有使用$ on绑定事件的指令,在销毁作用域时是否需要删除该绑定,或者它是自动完成的?还需要致电$ element.off吗?

return { restrict: ’A’,link: function($scope,$element,$attrs) {$element.on(’load’,function() { $element[0].contentWindow.focus();});$scope.$on(’iframe:focus’,function() { $element[0].contentWindow.focus();}); }};

相关文章: