我的代码中有一个$ 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? ...
}
}]);
答案 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
侦听器中的状态,并仅对历史记录返回行为执行操作