AngularJs & Ionic : Stop/Restart $timeout when change and return to view
AngularJs & Ionic : Stop/Restart $timeout when change and return to view
我有一个视图在 1 分钟后更新,我在离开此视图之前停止了计时器,一切正常。
返回当前视图后,计时器不再重新启动。
这是这个视图控制器的代码:
.controller('IndexCtrl', function($scope, $timeout, RestService) {
var updateN = 60*1000;
$scope.test = "View 1 - Update";
var update = function update() {
timer = $timeout(update, updateN);
/** make a http call to Rest API service and get data **/
RestService.getdata(function(data) {;
$scope.items = data.slice(0,2);
});
}();
/** Stop the timer before leave the view**/
$scope.$on('$ionicView.beforeLeave', function(){
$timeout.cancel(timer);
//alert("Before Leave");
});
/** Restart timer **/
$scope.$on('$ionicView.enter', function(){
$timeout(update, updateN);
//alert("Enter");
});
})
.controller('ViewCtrl2', function($scope) {
$scope.test = "View 2";
});
当你回到当前视图时,它来自缓存,所以控制器不再工作。您可以通过添加以下代码行在应用的配置部分禁用缓存:
$ionicConfigProvider.views.maxCache(0);
或者您可以通过添加禁用路由部分中特定视图的缓存
缓存:假 属性.
我解决了这个问题,
缓存没有问题,但是我重新进入页面后没有调用函数更新。
我将更新函数移到 $ionicView.enter 中:
更正后的代码是:
$scope.$on('$ionicView.beforeLeave', function(){
//updateN=12000000;
$timeout.cancel(timer);
//alert("Leave");
});
$scope.$on('$ionicView.enter', function(){
//updateN=12000000;
var update = function update() {
timer = $timeout(update, updateN);
RestService.getdata(function(data) {
//console.log(tani);
//$scope.items = data;
$scope.items = data.slice(0,2);
});
}();
});
在您的代码中,您的控制器函数不会调用视图更改。在 var update 函数之外调用 $timeout 函数。每次加载视图时,它都会调用其控制器并在其范围内调用匿名或自执行函数。
.controller('IndexCtrl', function($scope, $timeout, RestService) {
var updateN = 60 * 1000;
$scope.test = "View 1 - Update";
var update = function update() {
var timer = $timeout(update, updateN);
/** make a http call to Rest API service and get data **/
RestService.getdata(function(data) {;
$scope.items = data.slice(0, 2);
});
}();
/** Stop the timer before leave the view**/
$scope.$on('$ionicView.beforeLeave', function() {
$timeout.cancel(timer);
//alert("Before Leave");
});
/** Restart timer **/
$scope.$on('$ionicView.enter', function() {
timer()
});
})
.controller('ViewCtrl2', 函数($scope) {
$scope.test = "View 2";
});
我有一个视图在 1 分钟后更新,我在离开此视图之前停止了计时器,一切正常。 返回当前视图后,计时器不再重新启动。
这是这个视图控制器的代码:
.controller('IndexCtrl', function($scope, $timeout, RestService) {
var updateN = 60*1000;
$scope.test = "View 1 - Update";
var update = function update() {
timer = $timeout(update, updateN);
/** make a http call to Rest API service and get data **/
RestService.getdata(function(data) {;
$scope.items = data.slice(0,2);
});
}();
/** Stop the timer before leave the view**/
$scope.$on('$ionicView.beforeLeave', function(){
$timeout.cancel(timer);
//alert("Before Leave");
});
/** Restart timer **/
$scope.$on('$ionicView.enter', function(){
$timeout(update, updateN);
//alert("Enter");
});
})
.controller('ViewCtrl2', function($scope) {
$scope.test = "View 2";
});
当你回到当前视图时,它来自缓存,所以控制器不再工作。您可以通过添加以下代码行在应用的配置部分禁用缓存:
$ionicConfigProvider.views.maxCache(0);
或者您可以通过添加禁用路由部分中特定视图的缓存 缓存:假 属性.
我解决了这个问题, 缓存没有问题,但是我重新进入页面后没有调用函数更新。 我将更新函数移到 $ionicView.enter 中: 更正后的代码是:
$scope.$on('$ionicView.beforeLeave', function(){
//updateN=12000000;
$timeout.cancel(timer);
//alert("Leave");
});
$scope.$on('$ionicView.enter', function(){
//updateN=12000000;
var update = function update() {
timer = $timeout(update, updateN);
RestService.getdata(function(data) {
//console.log(tani);
//$scope.items = data;
$scope.items = data.slice(0,2);
});
}();
});
在您的代码中,您的控制器函数不会调用视图更改。在 var update 函数之外调用 $timeout 函数。每次加载视图时,它都会调用其控制器并在其范围内调用匿名或自执行函数。
.controller('IndexCtrl', function($scope, $timeout, RestService) {
var updateN = 60 * 1000;
$scope.test = "View 1 - Update";
var update = function update() {
var timer = $timeout(update, updateN);
/** make a http call to Rest API service and get data **/
RestService.getdata(function(data) {;
$scope.items = data.slice(0, 2);
});
}();
/** Stop the timer before leave the view**/
$scope.$on('$ionicView.beforeLeave', function() {
$timeout.cancel(timer);
//alert("Before Leave");
});
/** Restart timer **/
$scope.$on('$ionicView.enter', function() {
timer()
});
})
.controller('ViewCtrl2', 函数($scope) {
$scope.test = "View 2";
});