我有一個遞歸函數調用另一個異步函數,並在解決的承諾,幾秒鐘後再次調用自身:
$scope.gamePolling = function() {
if ($scope.getGames) {
$scope.getGameData().then(function() {
$timeout(function() {
$scope.gamePolling();
}, 3000);
});
}
};
當改變路線/狀態(使用UI路由器),我認爲$範圍應該被銷燬,所以我可以使用關閉遞歸函數:
$scope.$on('destroy', function() {
$scope.getGames = false;
});
然而,接下來的頁面中gamePolling功能不斷呼籲本身,因爲破壞內的斷點永遠不會被擊中。
所以我的問題是,爲什麼不是$銷燬觸發事件? 附:這在刪除$超時時也會發生,所以問題必須與遞歸有關。
我解決此問題得到,通過在$ stateChangeStart關閉gamePolling():
$scope.$on('$stateChangeStart', function() {
$scope.getGames = false;
});
所以輪詢停止但的$破壞事件似乎仍然沒有被觸發。
作爲一個小測試,狀態/控制AI所分配的當前$範圍爲$ rootScope變量,所以我可以檢查它是否在國家/控制器B摧毀:$rootScope.testScope = $scope;
當控制器B檢查$rootScope.testScope.$$destroyed
,它返回真實。所以看起來控制器A的$範圍被成功銷燬。但是,在$ rootScope.testScope中,我仍然可以訪問分配給$ scope的變量。
一杯咖啡可能..嘗試改變'「destroy''爲'」 $ destroy'' – Minato
這就是它!亞歷克斯打了你幾分鐘,但無論如何。 – Matt