2014-01-17 161 views
4

我正在使用Angular作为单个页面应用程序。有时我有一个更长的项目列表。当用户向下滚动页面并点击该项目时,他们将转到该项目的详细视图。如果他们点击浏览器上的后退按钮,角色会将他们带回列表中,但它会回到列表顶部。AngularJs浏览器后退按钮:返回到上一个地点页

通常在一个简单的html页面上,如果你向下滚动一个页面,然后点击一个链接并转到另一个页面,如果你点击浏览器上的后退按钮,它会立即返回到你所在的滚动位置在该页面上。如果您正在浏览项目列表,这非常有用。

有没有办法让Angular模仿这种行为,以便使用后退按钮将用户带回列表和相同的滚动位置?

+0

的可能的复制[保留在AngularJS路由改变滚动位置?](https://stackoverflow.com/questions/14107531/retain-scroll-position-on-route-change -in-angularjs) – azerafati

回答

0

这听起来像你想要使用HTML历史API,如window.history.pushState()window.history.popState()。这听起来像你想使用浏览器滚动。

快速谷歌搜索发现我this documentation about $locationthis documentation about scrolling从AngularJS文档。

我不知道如何在AngularJS做到这一点,但在jQuery的你可以用pushState()到一个特定的URL添加到浏览器的历史记录(这可能是你的同一个页面上的#),然后你可以添加一个popState()处理程序,当用户单击后退按钮时,将执行刷新页面以外的操作。

例如

$(document).on('load',function(){ 
window.history.replaceState({element: {positionY: 0}},"load",location.pathname); 
}); 

$(mylink).click(function(evt){ 
// something like: window.history.pushState(evt.target); 
}); 

// this occurs when the user clicks the back button 
$(document).on("popstate", function(evt) { 
evt.preventDefault(); // prevents page refresh 
var state = evt.originalEvent.state; 
window.scrollTo(0,state.element.positionY); 
} 
+0

谢谢,我确实在HTML5模式下有角度,但后退按钮总是会将用户带回页面的顶部,即使它们已经向下滚动。 – Frank

+0

这并不回答这个问题。 Angular使用历史API。问题不在于来回。这是关于不丢失列表页面中的位置。 –

+0

@Frank我的建议是搜索关于历史API和浏览器在JavaScript中滚动的更多信息。您可以使用历史记录API在点击后退按钮之前获取他们点击的信息(或者如果他们没有点击任何内容,您可以在页面加载时执行'replaceState()',以便当它们碰到后面按钮,你知道他们以前看到的东西只是简单的页面)。 –

相关问题