使用角RouteReuseStrategy缓存(路由)组件的实例代码

  

使用角RouteReuseStrategy缓存组件

  

<强>缓存组件与角RouteReuseStrategy

  

RouteReuseStrategy提供者允许我们控制角路由和组件生命周期的行为。

  

当我们在组件间切换的时候,角都会销毁上一个组件,并且创建一个新的组件。在大多数情况下,我们可能不想让它这样工作,因为每次加载一个组件,可能会有很多类似HTTP请求一样的昂贵的操作。

  

这时候就需要RouteReuseStrategy了。

  

<强> RouteReuseStrategy是什么

  

RouteReuseStrategy接口声明了5个方法。

  

shouldReuseRoute   

这个方法每次切换路由时都会被调用未来。<代码> 参数是将要离开的路,由<代码>咕咕叫参数是将要加载的路由。如果这个方法返回 <代码>如此,路由将不会跳转(意味着路由没有发生变化)。如果它返回<代码>假>         shouldReuseRoute(未来:ActivatedRouteSnapshot,咕咕叫:ActivatedRouteSnapshot):布尔{//默认行为   返回的未来。routeConfig===curr.routeConfig;   }      

shouldAttach   

路由刚刚被打开,当我们加载到这个路由的组件上时,<代码> shouldAttach> ,<代码> 检索方法将会被调用,否则这个组件将会被重新创建。

        shouldAttach(路线:ActivatedRouteSnapshot):布尔;      

检索   

当<代码> shouldAttach 方法返回真正<代码> 时这个方法会被调用。提供当前路由的参数(刚打开的路由),并且返回一个缓存的<代码> RouteHandle> <代码>表示没有效果。我们可以使用这个方法手动获取任何已被缓存的<代码> RouteHandle>         检索(路线:ActivatedRouteSnapshot): DetachedRouteHandle |零;      

shouldDetach   

当离开当前路由时这个方法会被调用。如果返回真正<代码> ,<代码> 存储方法会被调用。

        shouldDetach(路线:ActivatedRouteSnapshot):布尔;      

  

存储   

这个方法当且仅当<代码> shouldDetach 方法返回真正<代码> 时被调用。我们可以在这里具体实现如何缓存<代码> RouteHandle> 检索方法中。它提供了我们离开的路由和<代码> RouteHandle>         存储(路线:ActivatedRouteSnapshot detachedTree: DetachedRouteHandle):空白;      

  

示例   

src/服务/route-strategy.service.ts

  

        进口{RouteReuseStrategy、DetachedRouteHandle ActivatedRouteSnapshot}“@angular/路由器”;   出口类RouteStrategyService实现RouteReuseStrategy {   公共静态处理程序:{[关键:string]: DetachedRouteHandle}={};   公共静态deleteRouteSnapshot(路径:字符串):{无效   const name=路径。替换(/\//g, ' _ ');   如果(RouteStrategyService.handlers[名字]){   删除RouteStrategyService.handlers[名字];   }   }/* *   *判断当前路由是否需要缓存   *这个方法返回假时则路由发生变化并且其余方法会被调用   * @param {ActivatedRouteSnapshot}的未来   * @param {ActivatedRouteSnapshot}咕咕叫   * @returns{布尔}   * @memberof CacheRouteReuseStrategy   */公共shouldReuseRoute(未来:ActivatedRouteSnapshot,咕咕叫:ActivatedRouteSnapshot):布尔{   返回的未来。routeConfig===curr.routeConfig   ,,JSON.stringify (future.params)===JSON.stringify (curr.params);   }/* *   *当离开当前路由时这个方法会被调用   *如果返回正确则存储方法会被调用   * @param {ActivatedRouteSnapshot}路线   * @returns{布尔}   * @memberof CacheRouteReuseStrategy   */公共shouldDetach(路线:ActivatedRouteSnapshot):布尔{   返回true;   }/* *   *将路由写入缓存   *在这里具体实现如何缓存RouteHandle   *提供了我们离开的路由和RouteHandle   * @param {ActivatedRouteSnapshot}路线   * @param {DetachedRouteHandle} detachedTree   * @memberof CacheRouteReuseStrategy   */公共存储(路线:ActivatedRouteSnapshot detachedTree: DetachedRouteHandle):{无效   RouteStrategyService.handlers [this.getPath(路线)]=detachedTree;   }/* *   *路由被导航如果此方法返回正确则触发检索方法   *如果返回假这个组件将会被重新创建   * @param {ActivatedRouteSnapshot}路线   * @returns{布尔}   * @memberof CacheRouteReuseStrategy   */公共shouldAttach(路线:ActivatedRouteSnapshot):布尔{   返回! ! RouteStrategyService.handlers [this.getPath(路线);   }/* *   *从缓存读取缓存路线   *提供当前路由的参数(刚打开的路由),并且返回一个缓存的RouteHandle   *可以使用这个方法手动获取任何已被缓存的RouteHandle   * @param {ActivatedRouteSnapshot}路线   * @returns {(DetachedRouteHandle | null)}   * @memberof CacheRouteReuseStrategy   */公共检索(路线:ActivatedRouteSnapshot): DetachedRouteHandle |零{   返回RouteStrategyService.handlers [this.getPath(路线)]| |零;   }   私人getPath(路线:ActivatedRouteSnapshot):字符串{//tslint: disable-next-line: no-string-literal   const path=路线的_routerState .url。替换(/\//g, ' _ ');   返回路径;   }   }

使用角RouteReuseStrategy缓存(路由)组件的实例代码