$destroy事件在角度中不起作用


$scope.$on('$destroy', function (event){    
        $timeout.cancel(promiseObj);    
    });

如果我在正在加载的页面上(因为该页面包含$http请求,加载数据需要时间),并且在加载时,我从导航中更改页面,$timeout没有被删除,并且连续的http调用正在进行。 你能帮忙吗?

使用 $routeChangeStart 而不是 $destroy

$routeChangeStart

在路由更改之前广播。此时,路由服务开始解析发生路由更改所需的所有依赖项。通常,这涉及提取视图模板以及在解析路由属性中定义的任何依赖项。解析完所有依赖项后$routeChangeSuccess将触发。

可以通过调用事件的方法来防止路由更改(以及触发$location更改preventDefault更改。有关事件对象的更多详细信息,请参阅$rootScope.Scope


所以请尝试下面的代码。

$scope.$on('$routeChangeStart', function (scope, next, current) {
            if (next.$$route.controller != "Your Controller Name") {
               $timeout.cancel(promiseObj);// clear interval here
            }
        });

实际上,问题在于角度创建了许多与promiseObj同名的对象。因此,这些对象没有被删除。因此,我创建了一个 promiseObj[] 数组,并使用 for 循环删除了所有承诺。;)

$scope.$on('$destroy', function () {    
    for(var promise in promiseObj)
    {
        $timeout.cancel(promiseObj[promise]);
    }
});

最新更新