angularJS中的广播销毁

AngularJS在SPA和Hybrid App开发中表现出高效率,但其广播通信机制在某些场景下可能导致性能下降。当从A到B再到C,C发送广播,B接收,每次返回A再进入该流程,B中的广播接收会递增执行。解决方法是利用controller的$destroy事件,销毁广播回调,防止重复接收,从而避免性能问题。通过在$destroy时清理接收广播的代码,可以确保下次进入时不会重复接收。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  angularJS无论作为开发SPA(Single Page Application)的工具还是作为开发Hybrid App的武器,都体现了很好的开发效率,
但其中很多复杂的机制,在不同的业务场景下,有时却表现出不同的结果
以广播通信机制为例,有些项目工程中会表现出,从A controller跳转到 B controller,再跳转到 C controller,在C中发出广播(标准的$scope.$emit()),B中接收广播($rootScope.$on()),如果我们在B controller接收广播的代码中,写好打印语句,此时会打印一次
那么当我们从B controller返回A controller,再进入B controller再进入C controller,发送广播,B中接收广播,打印语句会连续执行2次
重复执行上面的步骤,每次回到A controller再重新进入这个广播发送与接收的模块,**广播都会比之前多执行一次
如果项目开发中,我们遇到这种问题的话,从某种角度上讲,我们的广播机制基本上算报废了,因为重复的广播接收必然导致性能下降
翻看angularJS的源码,其实广播通信机制是可以在controller $destroy时进行销毁的。

代码如下:

app.controller("CCtrl", [ '$scope',‘$ionicHistory’, function($scope,$ionicHistory){
  $scope.back = function(){
      $scope.$emit("Hello");//C controller中发送广播
  };
}]);
app.controller("BCtrl", [ '$scope','$rootScope', function($scope,$rootScope){
  var destroyHello=$rootScope.$on("Hello",function(){//接收广播
    conole.log('Hello');
  });
 $scope.$on('$destroy',function(){//controller回收资源时执行
   destroyHello();//回收广播
 });
}]);

广播的回调函数就是销毁这个广播的关键,我们在回收controller资源时,将我们的接收广播部门的代码回收掉,保证下次重新进入这个模块时,不会重复接收C controller中发送出的通信广播

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值