angular路由复用

项目要求:

a页面,输入检索条件,检索数据渲染list列表数据,点击某一条数据,路由跳转详情页b,

详情页b点击返回a页面,a页面不刷新,检索条件,列表数据,正常显示,

路由传参,可以实现,但是不允许拼接路由url传参咋办?

网上看到  angular路由复用  比较方便, 别人已经写好了 ,正好符合项目的要求,上代码

新建SimpleReuseStrategy.ts文件(跟app.module.ts同级)

import { RouteReuseStrategy, DefaultUrlSerializer, ActivatedRouteSnapshot, DetachedRouteHandle } 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,'_')

    }    public static deleteRouteSnapshot(name:string):void{

        if(SimpleReuseStrategy.handlers[name]){

            delete SimpleReuseStrategy.handlers[name];

        }else{

            SimpleReuseStrategy.waitDelete=name;

        }

    }

}



注册到模块当中(添加到app.mould.ts中)


你可能感兴趣的:(angular路由复用)