我有一个应用程序,它将AngularJS用于其中一些较新的页面,并在其他页面上使用旧的服务器端生成的模板。当一个人从Angular页面导航到服务器端模板化页面时,然后使用浏览器返回按钮返回Angular页面,没有任何JavaScript负责制作Angular页面。这使Angular页面处于不良状态。
我认为浏览器的bfcache将保留页面状态,就像用户导航时一样。然而,显然我不明白bfcache是如何工作的,除了放回肤浅的HTML模板代码外似乎什么都不做。
该应用程序不使用$ location服务,因为我不想让Angular负责应用程序范围的路由(现在):它对现有的遗留代码来说太过侵入。
在任何情况下,如果Angular应用程序具有指向外部站点的链接,问题应该完全相同:用户单击链接,访问外部站点,然后单击后退按钮以查看损坏的Angular页面。
为了让这个案子有效,我错过了什么?
在所有JS执行的最开始,通过检查一些隐藏状态并发出一个广泛的location.reload()来避免重大错误会很好,但我不介意强制执行控制器。
答案 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);
};