2016-06-09 2 views
0

Идея заключается в том, чтобы модальная функция была открыта на определенной странице после того, как пользователь находился на ней в течение 10 секунд, и отмените ее, если пользователь покинет страницу. Он работает, когда я обновляю страницу, но когда я перехожу к странице, мой код отменяет интервал $, когда он загружается.

В моем контроллере:

$rootScope.$on("$locationChangeStart", function(event, next, current) { 
      $interval.cancel(interval); 
     }); 

$scope.openmodal = function() { 
     interval = $interval(function() { 
      var modalInstance = $uibModal.open({ 
       animation: $scope.animationsEnabled, 
       templateUrl: 'modal.html', 
       controller: 'ModalInstanceCtrl', 
       size: 'lg', 
      });    
     }, 10000, [1]);   
    } 

$scope.openmodal(); 

Проблема заключается в $ locationChangeStart выполняется, когда состояние загрузки приходит из другого государства. Когда я просто обновляю браузер, $ locationChangeStart не запускается, и модальная функция откроется через 10 секунд. Как остановить мой контроллер от вызова метода $ interval.cancel() при загрузке из другого состояния?

+1

Пробовал использовать $ stateChangeStart вместо этого? Или даже лучше $ stateChangeSuccess? – rrd

ответ

1
$scope.$on('$stateChangeSuccess', function() { 
    $interval.cancel(interval); 
}); 

Пожалуйста, прочтите DOCS конкретно раздел ui-router «s events.

0

Вам необходимо запустить таймер каждый раз, когда новое состояние загружается в контроллер состояния. Если пользователь остается в состоянии, отображается модальный. Но если пользователь покидает состояние перед открытием модального режима, вам необходимо отменить таймер, так как новое состояние снова начнет новый экземпляр таймера.

$scope.$on('$destroy', function() { 
      $interval.cancel(interval); 
     }); 
var interval = $interval(function() { 
     var modalInstance = $uibModal.open({ 
      animation: $scope.animationsEnabled, 
      templateUrl: 'modal.html', 
      controller: 'ModalInstanceCtrl', 
      size: 'lg', 
     });    
    }, 10000, [1]); 
Смежные вопросы