Angular 路由切换后页面返回顶部

 由于Angular是单页面应用,所以在路由切换后页面的位置并不会像多页面那样重新刷新页面,滚动条置顶,为了解决这个问题,有2种解决方式

一、监听路由事件,在里面做滚动条置顶操作。


import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
 
declare var $: any;
 
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {

  constructor(public router: Router) {
 
  }
 
  ngOnInit() {
 
    this.router.events
      .subscribe((event) => {
        $(window).scrollTop(0);
        // window.scrollTo(0, 0)
      });
  }
 
}

二、自 6.1.0-beta.1 版本开始,Angular Router 增加了 scrollPositionRestorationanchorScrolling 与 scrollOffset 配置项,用于定义路由导航中的位置处理

@NgModule({
  imports: [
    RouterModule.forRoot(routes, {
      scrollPositionRestoration: 'enabled',
      anchorScrolling: 'enabled',
      scrollOffset: [0, 0],
    })
  ]
})

1、scrollPositionRestoration 可能的选项有:

  • disabled:什么也不做(当前默认);
  • top:导航后自动回到页面顶部;
  • enabled:(后退时)恢复到原始位置或(前进时)基于 anchorScrolling 选项的元素位置(否则置顶);

2、anchorScrolling 可能的选项有:

  • disabled:什么也不做(当前默认);
  • enabled:跳转到当前 Fragment 对应元素的位置(如果有的话);

3、scrollOffset 用于设定置顶的位置。

 

注意:位置恢复需要在每次导航时记录位置,会增加额外内存占用(一个值为 [number, number] 数组的属性),因此理论上无法进行无限导航(伪内存泄漏)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值