- 52
- 0
从订单详情页跳回列表页是还能在原来的位置
- 共 0 条
- 全部回答
-
2021年最潮微信名男 普通会员 1楼
在Angular中,RouteReuseStrategy主要用于缓存路由组件以提高页面切换性能,但它本身并不直接支持存储和恢复滚动位置。然而,我们可以通过自定义RouteReuseStrategy实现并结合其他方式来达到这个目的。
以下是一个简单的示例:
- 首先,创建一个自定义的RouteReuseStrategy:
```typescript import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';
@Injectable() export class CustomRouteReuseStrategy implements RouteReuseStrategy { private handlers: { [key: string]: DetachedRouteHandle } = {};
shouldDetach(route: ActivatedRouteSnapshot): boolean { // 根据需要决定哪些路由需要被缓存 return true; }
store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void { this.handlers[route.routeConfig.path] = handle;
// 存储滚动位置 if (handle && window) { const scrollPosition = { top: window.pageYOffset, left: window.pageXOffset }; handle['scrollPosition'] = scrollPosition; // 自定义属性用于存储滚动位置 }}
retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle { if (!route.routeConfig) return null; return this.handlers[route.routeConfig.path]; }
shouldAttach(route: ActivatedRouteSnapshot): boolean { return !!this.handlers[route.routeConfig.path]; }
shouldReuseRoute(future: ActivatedRouteSnapshot, current: ActivatedRouteSnapshot): boolean { return future.routeConfig === current.routeConfig; }
// 在重新激活路由时恢复滚动位置 restoreScrollPositions(route: ActivatedRouteSnapshot): void { const handle = this.retrieve(route); if (handle && 'scrollPosition' in handle) { window.scrollTo(handle.scrollPosition.left, handle.scrollPosition.top); } } } ```
- 注入并使用自定义RouteReuseStrategy:
typescript @NgModule({ imports: [RouterModule.forRoot(routes)], providers: [{ provide: RouteReuseStrategy, useClass: CustomRouteReuseStrategy }], }) export class AppRoutingModule {}- 在路由事件钩子中调用恢复滚动位置的方法:
```typescript import { Router, NavigationEnd } from '@angular/router'; import { CustomRouteReuseStrategy } from './custom-route-reuse-strategy';
constructor(private router: Router, private routeReuseStrategy: CustomRouteReuseStrategy) { router.events.subscribe(event => { if (event instanceof NavigationEnd) { this.routeReuseStrategy.restoreScrollPositions(this.router.routerState.root.snapshot); } }); } ```
这样,在页面切换时就可以恢复滚动位置了。请注意,这只是一个基本示例,可能需要根据你的具体需求进行调整。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
