更改视图后,angularJS不会滚动到顶部

时间:2014-06-01 14:34:44

标签: angularjs

例如:

用户向下滚动视图A;

然后用户点击链接,该链接使用户可以查看B;

观点是变化, 但是用户的垂直位置保持不变,必须手动滚动到屏幕顶部。

这是一个有角色的错误吗?

我写了一个小的解决方法,使用jquery滚动到顶部;但是我找不到将它绑定到的正确事件。

看到评论后

编辑

我如何以及何时将自己拉到顶端?我使用jquery但$ viewContentLoaded事件太快了(该方法运行,但页面当时没有滚动)

3 个答案:

答案 0 :(得分:21)

解决方案是将autoscroll="true"添加到ngView元素:

<div class="ng-view" autoscroll="true"></div>

https://docs.angularjs.org/api/ngRoute/directive/ngView

答案 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>

如果您在单击事件后查看更改,则还可以将函数调用放在该元素上。只是说到了时间。只取决于事情的设置方式。