Angular:如何根据函数调用切换路由

时间:2014-04-14 08:03:30

标签: angularjs routes onbeforeunload

我的app.js中有三条路线但是当我从创建切换到任何其他路线时,我想检查用户是否有意点击切换或是否是错误,因此会有返回弹出窗口要求用户留在页面上或离开页面。在通常情况下,它可以使用此代码:

window.onbeforeunload = confirmExit;
function confirmExit() {
    return "You have attempted to leave this page. Are you sure?";
}

但由于这是一个SPA应用程序,我必须在切换路径时运行此功能:

这是我的路线

testApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/tests', {
        templateUrl: 'partials/list.html',
        controller: 'ListCtrl'
      }).
      when('/tests/:testsId', {
        templateUrl: 'partials/detail.html',
        controller: 'DetailCtrl'
      }).
      when('/create/', {
        templateUrl: 'partials/create.html',
        controller: 'CreateCtrl'
      }).
      otherwise({
        redirectTo: '/tests'
      });
  }]);

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我想用角度指令:

.directive('confirm', [
    function() {
        return {
            restrict: 'AEC',
            link: function($scope, element) {
                element.bind('click', function(event) {

                        if (!confirm('You have attempted to leave this page. Are you sure?')) {
                            event.preventDefault();
                            return false;
                        }
                });
            }
        };
    }
]);

并在您的HTML中:

<a href="/route" confirm>link</a>

这样,标准链接重定向将被截获,并且只有在用户确认时才会进行重定向。

工作小提琴:http://jsfiddle.net/HB7LU/3119/

编辑删除了jquery引用+ jsfiddle链接

用于全局重定向拦截的

edit2:(如退格键或页面上任何点击的链接),请参阅此小提琴http://jsfiddle.net/9MnE9/124/

在这里,我使用$routeChangeStart来观看任何位置变化。