首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用ui-router和Angularjs自动滚动到顶部

使用ui-router和Angularjs自动滚动到顶部
EN

Stack Overflow用户
提问于 2014-10-19 04:49:01
回答 7查看 41.3K关注 0票数 65

我读过这么多不同的问题,没有一个解决方案适合我的用例。我开始只是简单地在我的所有链接上添加target="_top“,但这实际上迫使我的应用程序重新加载,这将不起作用。我也看到人们说他们使用autoscroll="true",但这似乎只有在我的视图ui-中才能起作用。

这样做的问题是,在我的index.html文件中,我修复了nav和其他静态元素,它们位于我的第一个ui-view之上。这意味着当我转到其他页面时,当页面加载超过这些元素时,我会失去导航。我也试着把这个放在身体上:

代码语言:javascript
复制
<body autoscroll="true">
</body>

这似乎也没有什么用。所以问题是,我如何确保新的页面(新的路由从ui-router更改)导致从页面的顶部开始?谢谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-12-12 02:50:11

如果您希望它始终跨浏览器滚动到0,请不要使用自动滚动。只需将此代码块放在run块中:

代码语言:javascript
复制
$rootScope.$on('$stateChangeSuccess', function() {
   document.body.scrollTop = document.documentElement.scrollTop = 0;
});
票数 148
EN

Stack Overflow用户

发布于 2017-12-06 12:30:40

Using version 1.0.6,为了支持$transitions服务,$stateChangeSuccess事件已弃用。下面是我用来在每次状态改变时滚动到顶部的代码:

代码语言:javascript
复制
app.run(['$transitions', function ($transitions) {
    $transitions.onSuccess({}, function () {
        document.body.scrollTop = document.documentElement.scrollTop = 0;
    })
}]);
票数 18
EN

Stack Overflow用户

发布于 2014-10-19 07:44:22

我有完全相同的问题,修复了导航栏的路线变化,页面加载部分向下滚动页面。

我刚刚在ui-view中添加了autoscroll="false",如下所示:

代码语言:javascript
复制
<div ui-view="main" autoscroll="false"></div>

编辑

我刚刚测试了这个方法,有点下流,但它是有效的。将angular服务$anchorScroll$location导入到相关控制器中,以进行ui-router .state配置。然后在ui路由器$stateParams上使用$watch在路由/状态更改时调用$location.hash('top');

https://docs.angularjs.org/api/ng/service/$anchorScroll

https://docs.angularjs.org/api/ng/service/$location#hash

代码语言:javascript
复制
.controller('myCtrl', function ($location, $anchorScroll, $scope, $stateParams) {

    $scope.$watchCollection('$stateParams', function() {
       $location.hash('top');
       $anchorScroll();
    });
});
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26444418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档