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

問題を解決しました。キャッシュに問題はありませんが、ページに再入力した後に関数 update が呼び出されません。update 関数を $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 に答える
-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 に答える