$ locationChangeStart仅在后退按钮上

时间:2014-07-01 15:12:27

标签: javascript angularjs

我的代码中有一个$ locationChangeStart,但我只希望它在按下浏览器的后退按钮时执行。这样的事情甚至可能吗?

app.run(['$rootScope', '$http', '$log', '$location', function($rootScope, $http, $log, $location) {

    $rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl) {

        ... only run this on back button? ...

    }
}]);

2 个答案:

答案 0 :(得分:2)

我不认为只有当浏览器的后退按钮触发路由更改时才能“使其运行”,但您可以查看浏览器是否正在尝试返回上一个路由。

可以通过在浏览器中点击“返回”或实际导航到之前访问过的网址来触发。

app.run(['$rootScope', function($rootScope) {

    var previousUrl;    

    $rootScope.$on('$locationChangeStart', function(event, newUrl, oldUrl) {

        if (previousUrl && previousUrl === newUrl) {
            //Browser is navigating back
        } else {
            previousUrl = oldUrl;
        }

    }
}]);

但如果这是劫持后退按钮的一些狡诈计划的一部分,请不要。大多数用户不会批准。

答案 1 :(得分:0)

您只能在支持HTML5历史记录API的浏览器上执行此操作

http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html

然后,您可以检查$locationChangeStart侦听器中的状态,并仅对历史记录返回行为执行操作