-->

在AngularJS,用户离开模板/页面时如何检测?(In AngularJS, how to de

2019-07-05 08:30发布

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

此代码似乎运作良好: http://jsfiddle.net/PQz5k/

当用户离开页面它能检测。 它执行Javascript代码当链接用户点击去一个不同的HTML页面或URL,或者如果用户重新加载页面。

然而,当我从一个AngularJS模板去到另一个它不工作。 举个例子,如果我在template1.html,我想Javascript代码做一些Controller1.js当用户离开template1.html去template2.html。 什么是下面这段代码在AngularJS相当于?:

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

Answer 1:

我认为你有两个控制器,一个像这样每个模板:

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

那么,当你从一个模板切换到另一个有是一个的燃煤名为$摧毁一个事件,您可以在这里读了它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在$范围被破坏,该事件将被调用,而间隔将被清除。



Answer 2:

这是当你离开一个模板(也提示确认对话框)为:

             function Controller_1($scope...){
               var myInterval = setInterval(...);
               $scope.$on('$locationChangeStart', function (event, next, current) {
                    console.log(current);

                    if (current.match("\/yourCurrentRoute")) {
                        var answer = confirm("Are you sure you want to leave this page?");
                        if (!answer) {
                            event.preventDefault();
                        }else{
                            clearInterval(myInterval);
                        }
                    }
                });
               }


Answer 3:

如果你正在使用的用户界面,路由器,那么你可以使用的OnExit,财产

    $stateProvider.state('foo', {
        url: '/foo',        
        templateUrl: 'views/foo.html',    
        controller: 'fooController',
        onExit: ['$fooService', function($fooService) => {
            $fooService.hide();//do what u want to do here
        }]

    });


Answer 4:

您可以使用一个观察者检查时位置路径改变了,是这样的:

$scope.$watch(function(){
    return $location.path();
}, function(newPath, oldPath){
   //...Do something
})

然后,你可以得到原来的位置,而新的位置,并执行任何你想要的功能,或



文章来源: In AngularJS, how to detect when user leaves template/page?