angularJS在更改视图后不会滚动到顶部
问题的原因是Angular在加载新视图时不会自动滚动到顶部,而是保持当前的滚动位置。解决方法是在bootstrap文件(通常称为app.js)中添加以下代码:
myApp.run(function($rootScope, $window) { $rootScope.$on('$routeChangeSuccess', function () { var interval = setInterval(function(){ if (document.readyState == 'complete') { $window.scrollTo(0, 0); clearInterval(interval); } }, 200); }); });
这是一个纯JavaScript的解决方案(如果可以的话,最好不要使用jQuery)。
解释:该脚本每200毫秒检查一次新的DOM是否完全加载,然后滚动到顶部并停止检查。我尝试过没有这个200毫秒的循环,有时滚动失败,因为页面还没有完全显示出来。
此外,如果你使用的是默认的路由器,$routeChangeSuccess
事件才会被触发。如果你有一些自定义的导航,你也可以监听$viewContentLoaded
或$stateChangeSuccess
事件。另外,如果你压缩代码,.run(function($rootScope, $window) {
应该像这样调用:.run([ "$rootScope", "$window",function($rootScope, $window) {
这两个问题让我花了很多时间才意识到,所以希望这对其他人有所帮助(你可能想要更新你的答案以包含这些信息)。