首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检测用户是否在Angularjs中单击了浏览器的后退按钮

如何检测用户是否在Angularjs中单击了浏览器的后退按钮
EN

Stack Overflow用户
提问于 2015-04-28 00:39:11
回答 2查看 45.9K关注 0票数 20

我有一个类似表单的页面,里面有一些数据。并且想要在用户单击浏览器的后退按钮时显示弹出/警告,询问“他们是想返回还是停留在同一页面上”。我正在使用angular-ui-router的$stateProvider,并且只想将它绑定到一个状态/视图。

EN

回答 2

Stack Overflow用户

发布于 2015-09-15 03:49:24

以下是我的解决方案

代码语言:javascript
复制
app.run(function($rootScope, $location) {
    $rootScope.$on('$locationChangeSuccess', function() {
        if($rootScope.previousLocation == $location.path()) {
            console.log("Back Button Pressed");
        }
        $rootScope.previousLocation = $rootScope.actualLocation;
        $rootScope.actualLocation = $location.path();
    });
});
票数 1
EN

Stack Overflow用户

发布于 2019-09-25 03:01:59

类似于syraz37的答案,但对于新的$transition应用编程接口:

代码语言:javascript
复制
angular
    .module('app')
    .run(function($rootScope, $transitions) {

        // Track "previous state" to be used elsewhere to determine if the user
        // goes "back".
        $transitions.onStart({}, (transition) => {
            if ($rootScope._previousState === transition.$to().name) {
                $rootScope._isPreviousState = true;
            } else {
                $rootScope._isPreviousState = false;
            }
            $rootScope._previousState = transition.$from().name;
        });

    });

然后,在任何控制器中,您都可以检查它是否被加载为“以前的状态”:

代码语言:javascript
复制
if ($rootScope._isPreviousState) {
    // ...reload some aspect of the controller state...
}

这归因于ninjaPixel上面指出的警告,在那里你可以转到状态A,然后状态B,然后再转到状态A(都是向前的方向),它会认为用户已经“后退”了,但根据我们的需要,这是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29901409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档