首页 程序笔记 Angular scrollPositionRestoration回到顶部无效

Angular scrollPositionRestoration回到顶部无效

从Angular6.1.0-beta1版本开始,Angular Router增加了scrollPositionRestoration、anchorScrolling 与 scrollOffset 配置项,用于定义路由导航中的位置处理。

scrollPositionRestoration 可能的选项有:

disabled:什么也不做(当前默认);

top:导航后自动回到页面顶部;

enabled:(后退时)恢复到原始位置或(前进时)基于 anchorScrolling 选项的元素位置(否则置顶);

anchorScrolling 可能的选项有:

disabled:什么也不做(当前默认);

enabled:跳转到当前 Fragment 对应元素的位置(如果有的话);

scrollOffset 用于设定置顶的位置。

最近在做的一个项目中,在app-routing.module.ts添加了scrollPositionRestoration配置项,但是没有效果。

配置代码如下

@NgModule({
  imports: [RouterModule.forRoot(routes, {
    scrollPositionRestoration: 'enabled'//这里也尝试了设置为top,在那个项目里仍然无效
  })],
  exports: [RouterModule]
})

于是我创建了一个新的项目加了上面配置之后就能实现每次路由跳转都能回到页面顶部位置。

网上查阅了很多关于scrollPositionRestoration设置无效的文章,但是都没有得到满意的回答。

有一个说法是,scrollPositionRestoration设置为top后,会在调用已激活组件的ngAfterViewInit钩子之前,会触发滚动事件并恢复滚动位置。因此,当路由器尝试滚动时,该组件的视图尚未准备好。

但是为什么我创建的新项目就有效呢?唯独目前在做的这个项目里这个设置就没有效果。

没办法,只能自己实现了。我的实现方法是在app.component.ts里监听路由改变的事件,当路由变化时,回到页面顶部。实现代码如下

ngOnInit() {
    this.router.events.subscribe((evt) => {
        if (evt instanceof NavigationEnd) {
            window.scrollTo(0, 0);
	    //这里回到顶部,有很多写法
	    //假如你有滚动容器,可以这样写
            //const ele = document.getElementsById('容器Id');
	    //if (ele) {
	    //    ele.scrollIntoView();
	    //}
        }
    });
}
3

站心网

从Angular6.1.0-beta1版本开始,Angular Router增加了scrollPositionRestoration、anchorScrolling 与 scro..

为您推荐

js使用scroll事件实现锚点滚动到页面顶部时导航高亮

在 JavaScript 中,可以通过监听页面滚动事件,并判断页面顶部与各个锚点的距离来实现导航高亮效果。当某个锚点的内容块滚动到页面顶部时,自动高亮相应的导航项。以下是实现方式:1. HTML 结构假设我们有多个内容区..

Angular UT 模拟执行setTimeout

在 Angular 单元测试中,我们经常需要模拟异步操作,比如 setTimeout。提高测试速度: 真实环境下的 setTimeout 会阻塞测试,导致测试运行时间过长。确保测试的可靠性: 模拟 setTimeout 可以让我们更好地控制异步操..

Angular Mock 一个类的静态方法

理解 Angular Mock 和 静态方法在 Angular 单元测试中,Angular Mock 是一个强大的工具,它允许我们模拟和替换 Angular 的服务、组件和其他依赖项。而静态方法 是属于类本身,而不是类的实例的方法。它们可以直接通..

.NET MVC jquery.validate errorPlacement无效

jQuery Validate是一款用于表单验证的插件,可以方便地对表单进行各种验证。而errorPlacement选项则用于定义错误提示信息的显示位置。errorPlacement选项可以传入一个函数,该函数接收两个参数:错误提示信息元素(..

国外流行的前端框架有哪些?

国外流行的前端框架有很多,以下是一些常见且受欢迎的前端框架:React:由Facebook开发的JavaScript库,用于构建用户界面。它采用组件化的方式来构建复杂的UI,并具有高度的灵活性和性能优化。Angular:由Google开发..

Angular echarts No provider for InjectionToken NGX_ECHARTS_CONFIG!错误

npm install echartsnpm install ngx-echarts安装使用echarts运行时报如下错误ERROR NullInjectorError: R3InjectorError(IndexModule)[InjectionToken NGX_ECHARTS_CONFIG -> InjectionToken NGX_ECHARTS_CONFIG -..

Angular如何mock window对象

写单元测试时,有如下代码const localFile = window.URL.createObjectURL(this.pdfFile);这里想mock window对象,让createObjectURL随便返回一个对象。解决办法如下:beforeEach(async(()=>{(<any>window.URL.create..

通过css设置a标签锚点页面顶部padding距离

通过#hash值可以跳转到页面锚点位置,这样可以方便用户浏览页面内容。但是滚动到锚点元素位置时,他会紧贴着页面上方顶部。如果网站有固定在顶部的header导航,那么锚点内容会被header导航遮挡。尝试了一些解决方法..

Angular自定义验证器ValidatorFn单元测试

在项目中定义了自定义的验证器,代码如下:exportfunctionmyValidator(minNum):ValidatorFn{return(control:AbstractControl)=>{letflag=true;if(control.value<minNum&&control.value>0){flag=false;}return!flag?{..

position:sticky纯css实现粘性定位让元素滚到顶部固定

想要让某些元素(例如导航,概要)滚动到顶部后就悬停在顶部固定,可以通过postion:sticky纯css简单实现,而不用使用js使得代码很复杂。关于postion: stickyMSDN关于sticky的描述是这样的:元素按照文档的正常流定位..

flex超出一行显示省略号无效

使用flex布局,左右两个元素,其中一个元素使用flex-grow: 1,希望这个元素内的文字超过一行显示省略号。但是实际发现超出一行显示省略号无效。解决方法是设置width: 0就可以了。代码如下,为div设置一个width: 0就..

ORA-00911: 无效字符

ASP.NET连接ORACLE数据库,使用EF5.0的Database.ExecuteSqlCommand直接执行自己写的SQL语句抛出异常: 异常详细信息:Oracle.ManagedDataAccess.Client.OracleException: ORA-00911: 无效字符 进入调试,将执行的SQL..

前端有必要学Angular吗?

学习Angular是否有必要取决于你的职业目标、项目需求和个人兴趣。Angular是一种流行的前端框架,适用于开发大型、复杂的Web应用程序。以下是一些考虑因素,可以帮助你决定是否学习Angular:1. 项目需求如果你的项目..

Winform MDI父窗体设置透明度无效

在 WinForms 中,设置 MDI 父窗体的透明度(Opacity)确实会失效。这是因为 MDI 父窗体(Multiple Document Interface)的工作方式和普通窗体有所不同。MDI 父窗体通常用于承载多个子窗体(文档窗体),并且子窗体在..

前端框架React,Angular和Vue.js 优缺点对比

React 和 Angular 适合大型应用开发,Vue.js 适合小型应用和初学者。以下是前端三大主流框架React,Angular和Vue.js 优缺点对比:1. React:优点:React 是一个非常灵活和高性能的框架,具有虚拟DOM的概念,可以实现..

Angular 17新特性

Angular 17是 Angular 的最新版本。该版本包括了许多新特性和改进,旨在提高 Angular 的性能、可维护性和可访问性。性能改进Angular 17 包括了许多性能改进,旨在提高 Angular 应用程序的性能。这些改进包括:新的 I..

Angular单元测试函数根据不同的参数returnValue不同的值

编写Angular单元测试时,有一个场景是某个函数被多次调用,在mock这个函数的返回值的时候希望根据不同的参数返回不同的值。当需要针对同一个函数根据不同的参数返回不同的值时,你可以使用 Jasmine 的 calls.fake() ..

Angular 17和Vue.js怎么选?

Angular 17和Vue.js都是流行的JavaScript前端框架,它们都具有自己的优势和劣势。Angular 17的优势:强大的功能:Angular 17提供了丰富的功能,可以满足复杂应用程序的需求。良好的性能:Angular 使用虚拟DOM,可以..

Angular新官网angular.dev正式发布

Angular 官推发布消息,Angular.dev 新官网正式发布。Angular新官网地址:https://angular.dev/Angular 于 2016 年首次推出,旨在帮助开发人员构建现代网络应用程序。纵观其发展历程,Angular 已使数百万开发人员获..

Angular UT报错Error: NG0100: ExpressionChangedAfterItHasBeenCheckedError

有一个Angular的Component的单元测试代码,执行后fixture.detectChanges();就会报错Error: NG0100: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value fo..

发表回复

返回顶部