7

我有一个 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";

});
4

3 回答 3

4

我解决了问题,缓存没有问题,但是我重新进入页面后没有调用的函数更新。我在 $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);
    });
   }();
   });
于 2015-10-01T14:32:39.537 回答
0

当您返回当前视图时,它来自缓存,因此控制器不再工作。您可以通过添加以下代码行在应用程序的配置部分禁用缓存:

$ionicConfigProvider.views.maxCache(0);

或者您可以通过添加 cache : false 属性来禁用路由部分中特定视图的缓存。

更多信息在这里这里

于 2015-10-01T11:46:41.510 回答
-1

在您的代码中,您的控制器功能不会调用视图更改。在 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', function($scope) {

$scope.test = "View 2";

});

于 2015-10-06T19:17:25.243 回答