angularJS没有';更改视图后,请不要滚动到顶部

angularJS没有';更改视图后,请不要滚动到顶部,angularjs,Angularjs,例如: 用户在视图上向下滚动 然后用户点击一个链接,该链接将用户带到视图B 观点是变化的, 但用户的垂直位置保持不变,必须手动滚动到屏幕顶部 它是一只角虫吗 我写了一个小的变通方法,使用jquery滚动到顶部;但是我没有找到正确的事件来绑定它 查看评论后编辑: 我如何以及何时才能达到顶峰?我正在使用jquery,但是$viewContentLoaded事件太快了(该方法运行,但此时页面不会滚动)根据@jarrodek的评论,您似乎理解了问题发生的原因 至于解决方案,您可以遵循@TongShen的

例如:

用户在视图上向下滚动

然后用户点击一个链接,该链接将用户带到视图B

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

它是一只角虫吗

我写了一个小的变通方法,使用jquery滚动到顶部;但是我没有找到正确的事件来绑定它

查看评论后编辑


我如何以及何时才能达到顶峰?我正在使用jquery,但是$viewContentLoaded事件太快了(该方法运行,但此时页面不会滚动)

根据@jarrodek的评论,您似乎理解了问题发生的原因

至于解决方案,您可以遵循@TongShen的解决方案,将函数包装在
$timeout
中,也可以将函数调用放在正在加载的部分中

<!-- New partial-->
<div ng-init="scrollToTop()">

</div>


如果查看在单击事件后触发的更改,还可以对该元素进行函数调用。不过归根结底还是要看时机。这取决于设置方式。

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容易的话,最好不要使用它)


说明:脚本每隔200毫秒检查一次新DOM是否已完全加载,然后滚动到顶部并停止检查。我尝试不使用这个200ms循环,但它有时无法滚动,因为页面没有完全显示。

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

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


您可能有固定高度或其他东西。更改视图角度将从ng视图中删除内容,并将其替换为新内容。暂时,ng视图的高度==0。因此,如果你停留在页面底部,这意味着页面没有理由将你拉回到顶部(没有高度变化)。你可以将滚动代码包装成一个
$timeout
,超时时间非常短,比如100毫秒。这太棒了,伙计,谢谢:)我想为您的answear添加更多内容:首先,
$routeChangeSuccess
只有在您使用默认路由器时才会被触发,您也可以收听
$viewContentLoaded
$StateChangeSucces
,如果您有某种自定义导航,也可以缩小代码
。运行(function($rootScope,$window){
应该这样调用:
.run([“$rootScope”,“$window”,function($rootScope,$window){
这两个问题我花了很长时间才意识到,所以我希望这对其他人有所帮助(你可能想用这些信息@guilhem更新你的answear)