[Angular] 該如何使用設定 RouteReuseStrategy

Angular 路由机制中,有一个选项是 routeReuseStrategy,这一个设定可以让我们设定路由转换的过程中,是否要保留 component 并重复使用,而相关的使用方式如下
**

设定

**
首先,先建立一个Class并实作RouteReuseStrategy介面,RouteReuseStrategy介面包含了五个方法需要被实作

abstract class RouteReuseStrategy {
  abstract shouldDetach(route: ActivatedRouteSnapshot): boolean
  abstract store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void
  abstract shouldAttach(route: ActivatedRouteSnapshot): boolean
  abstract retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null
  abstract shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean
}

基本范例程式

import {
  RouteReuseStrategy,
  DefaultUrlSerializer,
  ActivatedRouteSnapshot,
  DetachedRouteHandle
} from '@angular/router';

export class AppRoutingCache implements RouteReuseStrategy {
  public static handlers: { [key: string]: DetachedRouteHandle } = {};

  // 判断路由是否能重复使用
  public shouldDetach(route: ActivatedRouteSnapshot): boolean {
     //默认所有的路由设定都可以重复使用
     //可透过route.data的方式来设定重复使用的规则
    return true;
  }

  // 当路由离开时,会触发此方法
  public store(
    route: ActivatedRouteSnapshot,
    handle: DetachedRouteHandle
  ): void {
    //将目前路由内容暂存起来
    AppRoutingCache.handlers[route.routeConfig.path] = handle;
  }

  // 当路由进入时,可判断是否还原路由的暂存内容
  public shouldAttach(route: ActivatedRouteSnapshot): boolean {
    return (
      !!route.routeConfig && !!AppRoutingCache.handlers[route.routeConfig.path]
    );
  }
  // 从Cache中取得对应的暂存内容
  public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle {
    if (!route.routeConfig) {
      return null;
    }
    return AppRoutingCache.handlers[route.routeConfig.path];
  }

  // 判断是否同一路由
  public shouldReuseRoute(
    future: ActivatedRouteSnapshot,
    current: ActivatedRouteSnapshot
  ): boolean {
    return future.routeConfig === current.routeConfig;
  }
}

注册

将写好的class注册在RootModule的proivders的区块中即可

providers: [{ provide: RouteReuseStrategy, useClass: AppRoutingCache }],

当这样子设定完成后,Angular路由机制就会依照我们实作的RouteReuseStrategy来管理路由的相关资讯,内包含ComponentRef,效果会是当我们重新返回该路由时,原本输入的资料还会存在。因为是使用当时离开时的Component而不是重新建立一个新的。

转自CK’s Notepad

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值