一尘不染

在AngularJS中,如何检测用户何时离开模板/页面?

angularjs

我正在使用Javascript命令:setInterval。我喜欢在用户离开页面时停止它。

该代码似乎运行良好:http :
//jsfiddle.net/PQz5k/

它检测用户何时离开页面。当用户单击链接以转到其他HTML页面或URL,或者用户重新加载页面时,它将执行Javascript代码。

但是,当我从一个AngularJS模板转到另一个模板时,它不起作用。例如,如果我在template1.html,我希望当用户离开template1.html转到template2.html时,Javascript代码在Controller1.js中执行某些操作。AngularJS中的以下代码等效于什么?:

$(window).on('beforeunload', function() {
    return 'Your own message goes here...';
});​

阅读 233

收藏
2020-07-04

共1个答案

一尘不染

我认为您有两个控制器,每个模板一个,如下所示:

function Controller_1($scope...){
    ...
}
function Controller_2($scope...){
    ...
}

好吧,当您从一个模板切换到另一个模板时,会触发一个名为$
destroy的事件,您可以在此处进行阅读:http://docs.angularjs.org/api/ng.$ro​​otScope.Scope#$destroy

假设我正在从具有Controller_1的模板切换到具有Controller_2的模板。Controller_1有一个我想停止的间隔。您可以使用以下方法完成此操作:

function Controller_1($scope, $interval...){
    var myInterval = $interval(...);
    $scope.$on("$destroy", function(){
        $interval.cancel(myInterval);
    });
}

这意味着,当Controller_1的$ scope被销毁时,将调用该事件并清除该间隔。

2020-07-04