tnblog
首页
视频
资源
登录

Angular路由复用策略 (切换tabs页面内容不丢失,保持原来状态)

9849人阅读 2021/1/25 16:58 总访问:372837 评论:0 收藏:0 手机
分类: Angular

一、引言

路由在执行过程中对组件无状态操作,即路由离退时组件状态也一并被删除;当然在绝大多数场景下这是合理的。进入组件时会执行 ngOnInit() 里面的初始化方法,使页面保持最开始的状态。但有些需求需要切换页面的时候,再切换回来该页面时保持原来的状态。此时我们就需要 Angular 的RouteReuseStrategy 贯穿路由状态并决定构建组件的方式。
说白了就是标签页进行切换时表单各种内容不会被更新不被销毁!

三、使用步骤

  • 创建路由复用车略接口SimpleReuseStrategy.ts,直接赋值即可,如果有需求可自行改动:
  1. import { RouteReuseStrategy, DefaultUrlSerializer, ActivatedRouteSnapshot, DetachedRouteHandle } from '@angular/router';
  2. export class SimpleReuseStrategy implements RouteReuseStrategy {
  3. public static handlers: { [key: string]: DetachedRouteHandle } = {}
  4. /** 表示对所有路由允许复用 如果你有路由不想利用可以在这加一些业务逻辑判断 */
  5. public shouldDetach(route: ActivatedRouteSnapshot): boolean {
  6. return true;
  7. }
  8. /** 当路由离开时会触发。按path作为key存储路由快照&组件当前实例对象 */
  9. public store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {
  10. SimpleReuseStrategy.handlers[route.routeConfig.path] = handle
  11. }
  12. /** 若 path 在缓存中有的都认为允许还原路由 */
  13. public shouldAttach(route: ActivatedRouteSnapshot): boolean {
  14. return !!route.routeConfig && !!SimpleReuseStrategy.handlers[route.routeConfig.path]
  15. }
  16. /** 从缓存中获取快照,若无则返回nul */
  17. public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle {
  18. if (!route.routeConfig) {
  19. return null
  20. }
  21. return SimpleReuseStrategy.handlers[route.routeConfig.path]
  22. }
  23. /** 进入路由触发,判断是否同一路由 */
  24. public shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
  25. return future.routeConfig === curr.routeConfig
  26. }
  27. }
  • 在app.module.ts中添加引入

    1. providers: [
    2. //路由复用
    3. { provide: RouteReuseStrategy, useClass: SimpleReuseStrategy }
    4. ],
  • 这时候就可以使用了,可自己看效果!

评价

Angular使用组件时遇到的一些错误整理

先看看代码exportclassSidenavComponentimplementsOnInit{ privatemediaMatcher:MediaQueryList=matchMedia(`(max-width...

Angular使用第三方资源(举例面向插件)

问题Example :我们需要一张svg到页面中1.把图片放在assets文件夹下面以move.svg为例2.需要对单个资源进行模板注册import{C...

Angular使用Proxy

Multiple entriesIf you need to proxy multiple entries to the same target define the configuration inproxy.conf.jsin...

Angular路由导航配置

开发工具:VSCode打开终端输入命令创建crisis-list和hero-list组件nggeneratecomponentcrisis-listnggeneratecomponenthero...

Angular环境搭建

开发工具:vscode命令执行:快捷键( Ctrl+Shift+` )或者打开终端近期一直写有关前端的东西,其实我是学后端C#.NET的,但是在...

Angular常用的创建命令

Angular开发在Angular开发中常见的一些命令创建命令ng generate component example 生成组件带有模版ng generate component...

关于Angular常用的创建命令。

在Angular开发中常见的一些命令创建命令ng generate component example生成组件带有模版ng generate component example -it...

基于Angular的HttpClient封装_HttpClient

基于angular的HttpClient封装_HttpClient,直接复制源码即可用包含常用的get、post、patch、delete和put请求;import{HttpC...

Angular使用加载指示符loading的ngx-loading

前言欢迎使用tnblog如果你的项目是纯angular需要用到请求或者其他方式时在在界面上通过loading的方式来展示请求进度或其他...

Angular与Layui框架集成使用

目录" class="reference-link">目录 目录前言初使用 下载layui资源包创建angular项目 搭建angular环境(已搭建忽略)创...

Angular与Layui框架集成使用(优化)

在使用后很多入坑 全局引入所有模块 Layui的所有模块可以全部一次性加载 所有模块可通过layui/lay/modules,这里可...

Angular路由复用策略

路由在执行过程中对组件无状态操作,即路由离退时组件状态也一并被删除;当然在绝大多数场景下这是合理的。进入组件时会执...

vs core 运行报An unhandled exception occurred: spawn EPERM See "C:\Users\ADMINI~1\AppData\Local\Temp\ng-HWFidp\Angular-errors.log"

前言:hello,大家好 I’m小付 好久不见,老实巴交的我又出现了, 今天给大家分享一下vs core运行报错遇到的一个坑。正文:...

Angular 基本常用语法

常用语法//引导 import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';platformBrowserDy...

Angular项目导入到本地运行报错

前 言:hello,大家好 我是你们熟悉的小付,就在咋天那个风高秋月的夜晚我又遭遇了项目的报错,看起来原因很简单以为只是简...
不帅~~但是很暖心.....
排名
14
文章
75
粉丝
21
评论
43
申请别的接口数据(网络接口)
是伍尚金哇 : 敲一夜代码,流下两三行泪水,掏空四肢五体,六杯白开水七桶泡面
mui框架-移动端跳转以及传值的简单方法(修改解决方法)
是伍尚金哇 : 测试了 可以直接在 extras: { userid:'10' //自定义扩展...
数据库的varchar和nvarchar的区别
是伍尚金哇 : 没人看 自己看一个 温习一下
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
欲买桂花同载酒,只可惜故人,何日再见啊。