如何防止AngularJS中的默认浏览器后退按钮功能?

时间:2014-06-04 13:26:38

标签: angularjs

我正在制作一款移动应用,它在应用的导航栏中有一个后退按钮。该按钮用于在应用程序中向上导航一级。并非所有级别的应用程序都写在url中,其中一些被跳过,因此我不能依赖浏览器后退按钮,因为并非所有内容都写在历史记录中。所以我想要做的是防止你单击后退按钮时发生的默认事件(甚至网址更改,因为我有一个功能,当你点击应用程序的某些部分时手动重写网址),我想要浏览器的后退按钮绑定到我的自定义功能。 我想在历史中用history.pushstate添加一个虚假的状态,所以当我按下时我会进入虚假状态,但不幸的是你不能有两个同名的状态。 你们知道任何解决方案吗? 感谢

3 个答案:

答案 0 :(得分:5)

我们希望防止用户在注销或令牌无效时使用后退按钮。

// Prevent to use the back button.
$scope.$on('$locationChangeStart', function(event) {
 if (!$scope.isAuthenticated) {
   event.preventDefault();
 }
});

if if是否可以实现你的url重写功能。 希望这有帮助

答案 1 :(得分:2)

试试这个:

$rootScope.$on("$routeChangeStart", function(event, next, current) {
    if(current && current.params === "example") {
        $location.path("/defaultPage");
    }
});

答案 2 :(得分:0)

以下代码可以解决这个问题:

var allowNav = false;
var checkNav = false;

$rootScope.$on('$stateChangeSuccess', function (event, toState, toStateParams, fromState, fromStateParams) {

            allowNav = checkNav;
            checkNav = true;

        });

$rootScope.$on('$locationChangeStart', function (event, next, current) {
            // Prevent the browser default action (Going back)
            if (checkNav) {
                if (!allowNav) {
                    event.preventDefault();
                }
                else {
                    allowNav = false;
                }
            }
        });