AngularJS-递归函数禁用$scope.on('destroy')
AngularJS - Recursive function disables $scope.on('destroy')
我有一个递归函数,它调用另一个异步函数,在解析promise后,几秒钟后再次调用自己:
$scope.gamePolling = function () {
if ($scope.getGames) {
$scope.getGameData().then(function () {
$timeout(function () {
$scope.gamePolling();
}, 3000);
});
}
};
当更改路由/状态(使用ui路由器)时,我认为$scope应该被销毁,这样我就可以使用关闭递归函数
$scope.$on('destroy', function () {
$scope.getGames = false;
});
但是,在下一页中,gamePolling函数会继续调用自己,因为destroy中的断点永远不会被命中。
所以我的问题是为什么$destroy事件没有被触发p.s.删除$timeout时也会发生这种情况,所以问题一定出在递归上。
我已经解决了这个问题,通过关闭$stateChangeStart:中的gamePolling()
$scope.$on('$stateChangeStart', function () {
$scope.getGames = false;
});
因此轮询停止,但$destroy事件似乎仍未触发。
作为一个小测试,在状态/控制器a中,我将当前的$scope分配给$rootScope变量,这样我就可以检查它是否在状态/控制B:$rootScope.testScope = $scope;
中被破坏
在控制器B中检查$rootScope.testScope.$$destroyed
时,返回true。因此,看起来控制器A的$scope已成功销毁。但是,在$rootScope.testScope中,我仍然可以访问分配给$scope的变量。
这是"$destroy"事件,而不是"destroy"
这很有趣,因为您提到的事件名称正确,而代码中缺少$sign前缀。
希望它能有所帮助!
更新:如果你允许的话,我建议你使用一个间隔,而不是超时+递归函数。然后,您可以在$destroy事件处理程序中"终止"间隔。
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- I'我设计了一个下拉菜单,onclick会出现,而on blur会消失
- window.on.scroll事件未启动
- Socket.io on Mozilla Rhino
- CSS中的游标属性似乎不适用于USB On The Go
- jQuery点击ON现在使用.load触发关闭
- JQuery.on(“keydown”)追加到页面时不工作
- 使用.on动态添加jquery/js不知道的html元素
- angularjs$valid-on-dates在firefox中报告错误
- addEventListener on NodeList
- 当我在节点上拖动鼠标时,我如何防止使用d3.ehavior.zoom().on(“缩放”,重绘)
- jQuery 1.7.2:.on()在一个页面上工作;Don’别再干别的了
- Jquery on单击“显示信息”
- 平均值.on(事件[,选择器][,数据],处理程序)
- 多个jQuery.on()事件无法运行xBrowser(取决于顺序)
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- $scope.$on(“$destroy”, ..)的事件处理程序将被销毁
- IE8 Errors On chart.destroy()
- AngularJS-递归函数禁用$scope.on('destroy')
- $的作用域.$on work和$destroy被调用