Angularjs历史后退按钮不起作用

时间:2016-09-16 16:20:44

标签: javascript jquery angularjs

我一直在查看Angularjs Back Button事件的大量示例,但是没有一个示例适用于我。每当按下浏览器后退按钮时,我的代码都不会获得该事件。我好几天都在摸不着头脑。

我想做的就是收到一个警告,询问用户是否确定要返回并放弃所有数据。

以下是我一直在尝试的代码。它是其他示例的副本,但包含完整的代码。

我曾尝试使用$ scope而不是$ rootscope在控制器中添加$ on,我已尝试在routechangestart上观察,似乎没有任何东西可以捕获后退按钮。

有人有一个完整的小例子或者告诉我我做错了什么吗?

var BackButtonTest = angular.module('BackButtonTest', ['ngRoute']);

BackButtonTest.controller('backbuttonCtrl', function($scope, $location, $route) {
});

BackButtonTest.run(function($rootScope, $route, $location){
    //Bind the $locationChangeSuccess event on the //rootScope, so that we don't need to 
    //bind in induvidual controllers.

    $rootScope.$on('$locationChangeSuccess', function() {
        $rootScope.actualLocation = $location.path();
    });

    $rootScope.$watch(function () {
        return $location.path()
    }, function (newLocation) {
        if($rootScope.actualLocation === newLocation) {
        // run a function or perform a reload
        }
    });
});

我使用的HTML代码如下:

<!doctype html>
<html lang="en" ng-app="BackButtonTest">
<head>
    <meta charset="utf-8">
    <title>BackButtonTest App</title>
</head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js</script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-route.min.js"></script>
<script src="app.js"></script>
<body ng-controller="backbuttonCtrl as bbc">
  <div class="container-fluid">
    <div class="row">
      <div class="col-md-8 col-md-push-2">
       Some random text
      </div>
    </div>
  </div>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

我建议使用$locationChangeStart,因为这是您可以“阻止”更改发生的地方。

逻辑基本上是:

  1. 拦截位置变更请求。
  2. 确定是否需要显示模态
  3. 如果位置发生变化preventDefault(这将阻止更改发生)
  4. 保存用户想去的地方
  5. 显示你的模态
  6. 如果他们点击'取消'忘了#4
  7. 如果他们点击确定,请允许#4发生。
  8. 此链接详细介绍了如何操作:http://weblogs.asp.net/dwahlin/cancelling-route-navigation-in-angularjs