导航回Angular应用程序时如何使后退按钮工作?

时间:2014-01-22 02:13:53

标签: javascript angularjs browser-history

我有一个应用程序,它将AngularJS用于其中一些较新的页面,并在其他页面上使用旧的服务器端生成的模板。当一个人从Angular页面导航到服务器端模板化页面时,然后使用浏览器返回按钮返回Angular页面,没有任何JavaScript负责制作Angular页面。这使Angular页面处于不良状态。

我认为浏览器的bfcache将保留页面状态,就像用户导航时一样。然而,显然我不明白bfcache是​​如何工作的,除了放回肤浅的HTML模板代码外似乎什么都不做。

该应用程序不使用$ location服务,因为我不想让Angular负责应用程序范围的路由(现在):它对现有的遗留代码来说太过侵入。

在任何情况下,如果Angular应用程序具有指向外部站点的链接,问题应该完全相同:用户单击链接,访问外部站点,然后单击后退按钮以查看损坏的Angular页面。

为了让这个案子有效,我错过了什么?

在所有JS执行的最开始,通过检查一些隐藏状态并发出一个广泛的location.reload()来避免重大错误会很好,但我不介意强制执行控制器。

1 个答案:

答案 0 :(得分:0)

在正确配置路线的单页面应用程序(SPA)中,您可以使用$routeChangeSucess跟踪路线更改,如下所示:

MainController 中:

scope.history = [];

$scope.$on('$routeChangeSuccess', function (event, current, previous) {         
        //this is how your track of the navigation history
        $scope.history.push($location.$$path);
    });


///Your go back code function can works something similar to this
   $scope.goBack = function(){       
        var prevUrl = $scope.history.length > 1 ? $scope.history.splice(-2)[0] : "/";
        $location.path(prevUrl);
    };