AngularJS控制器窗口resize函数在所有页面触发的问题求助
AngularJS窗口resize事件跨页面触发问题解决方法
问题根源:路由切换离开SiteController对应的页面时,控制器实例会被销毁,但之前绑定到$window的resize事件并未被移除,导致全局窗口resize时,已销毁控制器中的someFunction()仍会被触发。
解决方法:在控制器销毁时手动解绑resize事件,具体实现如下:
修改控制器代码,保存事件绑定返回的解绑函数,并在$scope的$destroy事件中执行解绑:
angular.module('app.site').controller('SiteController', SiteController); function SiteController($scope, $window) { // 绑定resize事件,保存返回的解绑函数 var unbindResizeHandler = angular.element($window).bind('resize', function () { someFunction(); }); // 监听控制器销毁事件,执行解绑 $scope.$on('$destroy', function() { unbindResizeHandler(); }); // 你的业务函数 function someFunction() { // 此处写原有的逻辑代码 } ... }
原理说明:当路由切换离开当前页面时,AngularJS会触发当前控制器$scope的$destroy事件,此时调用解绑函数就能移除之前绑定的resize事件,确保只有页面处于激活状态时,someFunction()才会响应窗口resize操作。
内容的提问来源于stack exchange,提问作者d_88_l
相关产品推荐
相关产品推荐

