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