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

j13ufse2  于 2023-10-15  发布在  Angular
关注(0)|答案(2)|浏览(144)

我的网站(还没有上线)使用了angularjs路由。当一个页面着陆时,基于快速的条件检查,它会将我们路由到第二个页面。路由发生得非常快,浏览器不存储第一页的历史。我们还启用了后退按钮功能,由于历史记录未存储,因此无法使用。此外,第一页上有几个外部链接,需要几秒钟才能加载。因此,当这些外部链接加载时,第一页出现,条件被检查并路由到第二页。对于强制浏览器记录第一页的历史记录,有什么想法或解决方案吗?
其他关于此的想法:有没有什么解决方案,使第一页等待所有的外部链接完全加载,然后做路由?
我在Google上搜索过,但还没有找到解决方案。任何形式的帮助都非常感谢。

v8wbuo2f

v8wbuo2f1#

导航历史记录需要实现一个StateHistory服务,该服务需要有将状态添加到私有Array中的方法,比如getPreviusState()

然后,您可以在$stateChangeSuccess事件上添加每个状态(使用angular ui-router

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向前导航。

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 documentation

eoxn13cs

eoxn13cs2#

Angular的**$location.replace()最终实现了这一点。
以前我使用的是
$location.url('/somepath')**,它只是重定向到我的浏览器主页,而不是保存第一页的历史记录。

相关问题