AngularJS添加到浏览器历史记录,无需重新加载页面,也没有HTML5 pushstate

ada*_*101 6 javascript browser-history angularjs

我有一个搜索页面,允许用户深入分类和/或输入搜索词.我想让用户能够使用后退按钮撤消这些操作.使用AngularJS,我如何让这个页面为每个操作的浏览器历史记录添加条目.我不能使用HTML5 pushstate.

ada*_*101 14

我发现我可以通过更改查询字符串参数来执行此操作,而无需从此处使用有关reloadOnSearch的答案重新加载页面:

$routeProvider
  .when('/items', {
    controller: 'ItemsCtrl',
    templateUrl: '/templates/items',
    reloadOnSearch: false
  },
  ...
);
Run Code Online (Sandbox Code Playgroud)

然后,从相同的答案,使用以下方法设置查询字符串:

$location.search('id', 123);
Run Code Online (Sandbox Code Playgroud)

最后使用此处的答案检测路线变化:

$scope.$on('$routeUpdate', function(){
  $scope.sort = $location.search().sort;
  $scope.order = $location.search().order;
  $scope.offset = $location.search().offset;
});
Run Code Online (Sandbox Code Playgroud)


mrz*_*myr 5

您可以使用关闭HTML5模式$locationProvider.html5Mode(false).

然后只需使用hashbang网址<a href="#!/search">Search</a>,它们就会被添加到浏览器的历史记录中.