$ destroy事件不是有角度的

时间:2015-04-21 06:04:17

标签: angularjs scope timeout ondestroy

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

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

2 个答案:

答案 0 :(得分:1)

使用$routeChangeStart代替$destroy

$ routeChangeStart

路线变更前广播。此时,路由服务开始解决路由更改发生所需的所有依赖关系。通常,这涉及获取视图模板以及解析路由属性中定义的任何依赖项。一旦解决了所有依赖关系,就会触发$ routeChangeSuccess。

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


请尝试以下代码。

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

答案 1 :(得分:1)

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

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