You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:40:56