$destroy 事件在 angular 中不起作用
$destroy event not working in angular
$scope.$on('$destroy', function (event){
$timeout.cancel(promiseObj);
});
如果我在一个正在加载的页面上(因为页面包含 $http
请求,加载数据需要时间)并且在加载时,我从导航更改页面,$timeout 不是正在被删除,连续 http
通话正在进行中。你能帮忙吗?
使用$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
}
});
实际上,问题是 angular 创建了许多与 promiseObj 同名的对象。
所以,那些对象没有被删除。因此,我创建了一个 promiseObj[] 数组,并使用 for 循环删除了所有承诺。 ;)
$scope.$on('$destroy', function () {
for(var promise in promiseObj)
{
$timeout.cancel(promiseObj[promise]);
}
});
$scope.$on('$destroy', function (event){
$timeout.cancel(promiseObj);
});
如果我在一个正在加载的页面上(因为页面包含 $http
请求,加载数据需要时间)并且在加载时,我从导航更改页面,$timeout 不是正在被删除,连续 http
通话正在进行中。你能帮忙吗?
使用$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
}
});
实际上,问题是 angular 创建了许多与 promiseObj 同名的对象。 所以,那些对象没有被删除。因此,我创建了一个 promiseObj[] 数组,并使用 for 循环删除了所有承诺。 ;)
$scope.$on('$destroy', function () {
for(var promise in promiseObj)
{
$timeout.cancel(promiseObj[promise]);
}
});