Angular JS-如何强制浏览器记录历史以便快速路由



我的网站(尚未上线)采用了angularjs路由。当一个页面着陆时,基于快速条件检查,它会将我们引导到第二个页面。路由发生得非常快,浏览器不会存储第一个页面的历史记录。我们还启用了后退按钮功能,由于没有存储历史记录,因此该功能不起作用。此外,第一页上有几个外部链接,加载需要几秒钟的时间。因此,当加载这些外部链接时,会出现第一个页面,并检查条件并将其路由到第二个页面。对于强迫浏览器记录第一页的历史记录,有什么想法或解决方案吗?

对此的其他想法是:有没有什么解决方案可以让第一个页面等待所有外部链接完全加载,然后进行路由?

我在谷歌上搜索过,但还没有找到解决方案。任何形式的帮助都将不胜感激。

导航历史您应该实现一个StateHistory服务,该服务应该有将状态添加到私有数组的方法,以及getPreviusState() 等方法

然后你可以在$stateChangeSuccess事件上添加每个状态(使用angular ui路由器)

angular.module('myApp', ['ui.router'])
.run(function($rootScope, navigationHistory){
  $rootScope.$on('$stateChangeSuccess',
      function(event, toState, toParams, fromState, fromParams) {
        navigationHistory.addVisitedState(toState,toParams);
      };
});

加载资源时导航使用$http获取资源(html或其他),作为callback使用$state.go向前导航。

angular.module('myApp')
.controller('AppCtrl', function($state,){
  $http.get('/someUrl'). // $http.get('page.html') / etc
  success(function(data, status, headers, config) {
    // save data or add it on the view/template
    $state.go('secondState');
    //Or
    //$state.go(navigationHistory.getLastState().name);
  }).
  error(errBack);
}

$http文档

Angular的$location.replacement()终于施展了魔法。

以前我使用$location.url('/somepath'),它只是重定向到浏览器的主页,而不是保存第一页的历史记录。

最新更新