2016-09-19 64 views
0

我已经做了一个离子和angularjs的应用程序。我有3页。当应用程序转到第2页时,如果您停留20秒....页面将重定向到第一页。角度超时

现在的问题是$超时工作只有2次。

我的控制器代码是:

.controller('Step2Ctrl', function ($scope, $state, $stateParams, $timeout) { 
    //Timeout 
    var promise; 
    $scope.start = function() { 
     $scope.stop(); 
     promise = $timeout(function() { $state.go('step1'); }, 20000); 
    } 

    $scope.stop = function() { 
     $timeout.cancel(promise); 
    }; 

    $scope.start(); 

    $scope.$on('$destroy', function() { 
     $scope.stop(); 
    }); 

}); 

我到底做错了什么?

谢谢

+0

你在''state.go'之前超时,你能记录'$ scope。$$ destroyed'吗?如果它是真的,你可以添加一个条件'if(!$ scope。$$ destroyed){$ state.go(...)}' – floribon

+0

正如我所看到的,问题是,当一个页面加载函数永远不会火。我认为页面加载从不起作用 – Dimitris

回答

0

您的问题是离子有一个观点缓存系统,大大节省了渲染HTML和执行你的控制器代码只有一次(见这个链接http://ionicframework.com/docs/api/directive/ionNavView/缓存区)。这样做是因为它在视图已经呈现时使您的应用程序更快。

为了解决这个问题,Ionic为您提供了UI路由器(Ionic用于路径系统)的一些角度事件,以控制在视图渲染之前或之后要执行的控制器代码部分。

所以,在你的控制器中添加这段代码,当视图进入时它总是会调用你的start()函数。

$scope.$on('$ionicParentView.beforeEnter',function(){ 
    $scope.start(); 
})