对于AngularJS Web应用程序:使用“后退”按钮导航回网页时,网页无法记住它们的最后滚动位置。为什么?该如何修复?

11
在浏览 AngularJS 的开发者指南时,我发现当使用浏览器的返回按钮返回到上一个页面时,并不会回到上一次滚动的位置,而是回到了页面顶部。由于开发者指南是用 AngularJS 构建的,我担心如果我使用 AngularJS 来构建自己的 Web 应用程序,用户也会有同样的体验,这可能会让他们感到不便。为什么会出现这种情况,如何解决呢?我需要使用 HTML5 的历史记录 API 吗?
请前往开发者指南自行查看这种行为:http://docs.angularjs.org/guide/directive

2
通常大多数浏览器不会等待xhr完成“滚动”,因此当您点击后退按钮时,页面在内容“加载”之前已经完成了“滚动”。不过我还没有调查任何解决方案。 - DerekR
2个回答

8
如果您想要修复它,我可以想到一个主意:在地图中(可以是服务或rootScope)跟踪每条路线的滚动位置 - 当您离开页面时($routeChangeStart监听器),请将滚动位置与路由路径一起保存。
当来到任何页面时,您可以检查地图中是否存在路由路径的记录,并在$routeChangeSuccess事件上将滚动窗口滚动到所需位置。

0
你应该研究一下Angular的$anchorScroll服务。

http://docs.angularjs.org/api/ng.$anchorScroll

这正是您的情况! 示例代码几乎已经说明了一切。


这仅适用于标有<a id="somewhat">的职位。问题涉及任何职位,而不仅仅是标记的职位。 - michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接