在angularjs中打开新窗口或新选项卡时停止,启动和销毁间隔

时间:2017-05-15 13:28:48

标签: javascript angularjs

我的间隔工作正常并且破坏性很好但是当我导航到新窗口或新标签时,警报也会显示在那里。如何停止此警报?

$scope.checkGuest = function() {
  $http.get(url + 'c_chat/checkGuestJson').success(function (data) {
    $scope.guestAlerts = data
    console.log(data);
    if(data == 1) {
      alert('plz register to enjoy more features');
    } 
    else {
      alert('plz register ! after 10 minutes your contact will be deleted');
    }
  })
}

我已经设置了这样的间隔11分钟

var intervalPromise = $interval(function () {
  $scope.checkGuest() 
}, 660000);      

$scope.$on('$destroy', function () { 
  $interval.cancel(intervalPromise); 
})

当路线改变时,警报不会显示正确,但是当新标签打开时,会显示警报,我不喜欢

 app.config(function ($routeProvider) {
   $routeProvider.when('/c_chat', {
     template: '<div class="gusestAlert"></div>',
     controller: app.chatCtrl
   });
 }

1 个答案:

答案 0 :(得分:0)

这里的问题是,如果您在新标签中打开链接,则不会触发$destroy侦听器,因为该角色的范围仍为“#34; alive&#34;。

您可以在此处执行的操作是每次打开新选项卡时强制调用侦听器。

例如

$scope.$on('$destroy', destroyInterval); //called by angular
$rootScope.$on('$destroyInterval', destroyInterval); //generic listener

function destroyInterval(){ 
  $interval.cancel(intervalPromise); 
})

<a href="/something" target="_blank" ng-click="$root.$emit('$destroyInterval') ">
  go to new tab </a>