例如:
用户向下滚动视图A;
然后用户点击链接,该链接使用户可以查看B;
观点是变化, 但是用户的垂直位置保持不变,必须手动滚动到屏幕顶部。
这是一个有角色的错误吗?
我写了一个小的解决方法,使用jquery滚动到顶部;但是我找不到将它绑定到的正确事件。
看到评论后编辑:
我如何以及何时将自己拉到顶端?我使用jquery但$ viewContentLoaded事件太快了(该方法运行,但页面当时没有滚动)
答案 0 :(得分:21)
解决方案是将autoscroll="true"
添加到ngView元素:
<div class="ng-view" autoscroll="true"></div>
答案 1 :(得分:9)
加载新视图时,Angular不会自动滚动到顶部,它只保留当前滚动位置。
以下是我使用的解决方法:
myApp.run(function($rootScope, $window) {
$rootScope.$on('$routeChangeSuccess', function () {
var interval = setInterval(function(){
if (document.readyState == 'complete') {
$window.scrollTo(0, 0);
clearInterval(interval);
}
}, 200);
});
});
将它放入你的引导程序(通常称为app.js)。
这是一个纯粹的JavaScript解决方案(如果简单的话,最好不要使用jQuery)。
说明:如果新DOM已完全加载,脚本会每200ms检查一次,然后滚动到顶部并停止检查。我尝试没有这个200ms的循环,有时无法滚动,因为页面没有完全显示。
答案 2 :(得分:1)
您似乎根据@ jarrodek的评论理解问题发生的原因。
至于解决方案,您可以按照@ TongShen的解决方案将函数包装在$timeout
中,也可以将函数调用放在您正在加载的部分中。
<!-- New partial-->
<div ng-init="scrollToTop()">
</div>
如果您在单击事件后查看更改,则还可以将函数调用放在该元素上。只是说到了时间。只取决于事情的设置方式。