angular 路由复用和路由懒加载

1. 注入 { provide: RouteReuseStrategy, useClass: SimpleReuseStrategy },

2.

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

 

//页面缓存用的

export class SimpleReuseStrategy implements RouteReuseStrategy {


 

public static handlers: { [key: string]: DetachedRouteHandle } = {}

 

private static waitDelete:string

 

/** 表示对所有路由允许复用 如果你有路由不想利用可以在这加一些业务逻辑判断 */

public shouldDetach(route: ActivatedRouteSnapshot): boolean {

return true;

}

 

/** 当路由离开时会触发。按path作为key存储路由快照&组件当前实例对象 */

public store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {

if(SimpleReuseStrategy.waitDelete && SimpleReuseStrategy.waitDelete==this.getRouteUrl(route)){

//如果待删除是当前路由则不存储快照

SimpleReuseStrategy.waitDelete=null

return;

}

SimpleReuseStrategy.handlers[this.getRouteUrl(route)] = handle

}

 

/** 若 path 在缓存中有的都认为允许还原路由 */

public shouldAttach(route: ActivatedRouteSnapshot): boolean {

return !!SimpleReuseStrategy.handlers[this.getRouteUrl(route)]

}

 

/** 从缓存中获取快照,若无则返回nul */

public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle {

if (!route.routeConfig) {

return null

}

return SimpleReuseStrategy.handlers[this.getRouteUrl(route)]

}

 

/** 进入路由触发,判断是否同一路由 */

public shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {

return future.routeConfig===curr.routeConfig &&

JSON.stringify(future.params)==JSON.stringify(curr.params);

}

 

private getRouteUrl(route: ActivatedRouteSnapshot){

return route['_routerState'].url.replace(/\//g, '_');

//+ '_' + (route.routeConfig.loadChildren || route.routeConfig.component.toString().split('(')[0].split(' ')[1] )

}

public static deleteRouteSnapshot(name:string):void{

if(SimpleReuseStrategy.handlers)

if(SimpleReuseStrategy.handlers[name]){

delete SimpleReuseStrategy.handlers[name];

}else{

SimpleReuseStrategy.waitDelete=name;

}

} 

 

public static deleteRouteSnapshot2(name:string):void{

if(SimpleReuseStrategy.handlers[name]){

delete SimpleReuseStrategy.handlers[name];

}else{

SimpleReuseStrategy.waitDelete=name;

}

}

 

}

转载于:https://my.oschina.net/youkun/blog/3018038

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值