Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS添加到浏览器历史记录中,无需重新加载页面和HTML5 pushstate_Javascript_Angularjs_Browser History - Fatal编程技术网

Javascript AngularJS添加到浏览器历史记录中,无需重新加载页面和HTML5 pushstate

Javascript AngularJS添加到浏览器历史记录中,无需重新加载页面和HTML5 pushstate,javascript,angularjs,browser-history,Javascript,Angularjs,Browser History,我有一个搜索页面,允许用户深入分类和/或输入搜索词。我想让用户能够使用后退按钮撤消这些操作。使用AngularJS,我如何让此页面为每个操作向浏览器历史添加条目。我无法使用HTML5 pushstate。您可以使用关闭HTML5模式 然后只需使用hashbang URL,如,它们将被添加到浏览器的历史记录中。我认为不使用HTML5 pushstate(至少,不实际更改当前位置)就不可能将条目添加到浏览器历史记录中 MDN页面讨论了pushstate的引入以及它如何实现这一新功能(这意味着以前不可

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

您可以使用关闭HTML5模式


然后只需使用hashbang URL,如
,它们将被添加到浏览器的历史记录中。

我认为不使用HTML5 pushstate(至少,不实际更改当前位置)就不可能将条目添加到浏览器历史记录中

MDN页面讨论了pushstate的引入以及它如何实现这一新功能(这意味着以前不可能实现):

编辑: 如果您无法使用HTML5 pushstate的原因是因为浏览器支持,请参阅以下polyfill:

我发现我可以通过更改查询字符串参数来实现这一点,而无需使用以下关于重新加载搜索的答案来重新加载页面:

然后,根据相同的答案,使用以下命令设置查询字符串:

$location.search('id', 123);
最后,使用以下答案检测路线变化


除了下面的重新加载搜索代码,跟踪位置更改事件对我很有用

$scope.$on('$locationChangeSuccess', function () {
      $scope.sort = $location.search().sort;
      $scope.order = $location.search().order;
      $scope.offset = $location.search().offset;
   });

尽管这可能会对某些人有所帮助。

是否可以在不重新初始化控制器的情况下更改路由?这正是我想要的。谢谢6年后,仍然有用!我需要根据用户输入动态更新页面上的url参数。使用history pushstate时的刷新让我发疯。谢谢:)
$scope.$on('$routeUpdate', function(){
  $scope.sort = $location.search().sort;
  $scope.order = $location.search().order;
  $scope.offset = $location.search().offset;
});
$scope.$on('$locationChangeSuccess', function () {
      $scope.sort = $location.search().sort;
      $scope.order = $location.search().order;
      $scope.offset = $location.search().offset;
   });