2017-05-15 2 views
1

Ich habe Intervall, das richtig funktioniert und gut zerstört, aber wenn ich zu einem neuen Fenster oder einem neuen Tab navigiere, wird die Warnung auch dort angezeigt. Wie kann ich diese Warnung stoppen?stoppen, starten und zerstören Intervall, wenn neues Fenster oder neue Registerkarte in angularjs geöffnet ist

$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'); 
    } 
    }) 
} 

Ich habe Intervall, wie dies für 11 Minuten eingestellt

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

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

Wenn Route der Alarm nicht dargestellt ist, die aber richtig geändert wird, wenn neue Registerkarte die Warnung geöffnet ist gezeigt, die ich NICHT MÖGEN

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

Antwort

0

auch das Problem hier ist, dass die $destroy Zuhörer nicht ausgelöst wird, wenn Sie auf einen Link in einem neuen Tab öffnen, weil der Spielraum für Winkel ist immer noch „lebendig“.

was Sie hier tun können, ist den Aufruf des Hörers jedes Mal erzwingen, wenn eine neue Registerkarte geöffnet ist.

zum Beispiel

$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> 
Verwandte Themen