AngularJS添加到浏览器历史记录中,无需重新加载页面,也没有HTML5推送状态
AngularJS add to browser history without page reload and without HTML5 pushstate
我有一个搜索页面,允许用户向下钻取类别和/或输入搜索词。我想让用户能够使用后退按钮撤消这些操作。使用 AngularJS,我怎样才能让此页面为每个操作的浏览器历史记录添加条目。我不能使用 HTML5 pushstate。
我发现我可以通过更改查询字符串参数来做到这一点,而无需使用有关重新加载页面的答案 重新加载页面 从这里:
$routeProvider
.when('/items', {
controller: 'ItemsCtrl',
templateUrl: '/templates/items',
reloadOnSearch: false
},
...
);
然后,从相同的答案中,使用以下方法设置查询字符串:
$location.search('id', 123);
最后使用此处的答案检测路线变化:
$scope.$on('$routeUpdate', function(){
$scope.sort = $location.search().sort;
$scope.order = $location.search().order;
$scope.offset = $location.search().offset;
});
您可以使用
$locationProvider.html5Mode(false)
关闭 HTML5 模式。
然后只需使用像 <a href="#!/search">Search</a>
这样的 hashbang 网址,它们将被添加到浏览器的历史记录中。
我不相信在不使用HTML5 pushstate的情况下(至少在不实际更改当前位置的情况下)将条目添加到浏览器历史记录中。
MDN 页面讨论了 pushstate 的引入以及它如何启用这个新功能(这意味着这在以前是不可能的):https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history
编辑:如果您无法使用 HTML5 pushstate 的原因是因为浏览器支持,请参阅此 polyfill:https://github.com/browserstate/history.js
连同下面的重新加载OnSearch代码来跟踪位置更改事件对我有用。
$scope.$on('$locationChangeSuccess', function () {
$scope.sort = $location.search().sort;
$scope.order = $location.search().order;
$scope.offset = $location.search().offset;
});
虽然它可能对某人有所帮助。
相关文章:
- ui路由器的惰性加载状态
- 在加载状态之前,我需要在angular js中为每个状态添加角色
- 在angular js中,每次应用程序进入状态时,重新加载状态的最佳方式是什么
- 表现出承诺'加载状态
- mediaelement.js/html5视频在前进过多或后退过多时永远保持加载状态
- Chrome应用程序:无法检索文件加载状态
- 将复选框重置为基于先前复选框的页面加载状态's状态
- UI 路由器不断重定向到索引,并且不加载状态/视图
- 引导手风琴.保留多个面板的页面加载状态
- 如何检测发布商 DFP 广告的 Google 双击的加载状态
- Angularjs ng-repeat中的Angleularjs按钮加载状态指令
- Redux-管理预加载状态
- p:fileDownload的策略,带有对话框和加载状态
- Knockout模板在某些情况下保持加载状态
- 当AJAX调用完成时重置Bootstrap加载状态按钮
- 刷新页面后在jtree中从加载状态返回数据
- 如何摆脱这个{{用户.Id}}(花括号)在页面处于加载状态时使用
- Ui-router加载状态,然后我怎么运行一个函数
- 如何显示加载状态的百分比ajax响应
- 如何监控图像源的完全加载状态