Angular中自定义路由复用策略

主要解决的问题

页面前进后退时,能保持之前的状态。

代码实现

// 1. 写一个类实现`RouteReuseStrategy`接口[如果是Ionic工程则需要实现IonicRouteStrategy]自定义路由复用策略
import {ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy} from '@angular/router';

    export class CustomRouteReuseStrategy implements RouteReuseStrategy {
        handlers: { [key: string]: DetachedRouteHandle } = {};
        shouldDetach(route: ActivatedRouteSnapshot): boolean {
            return route.data.reload || false;
        }

    store(route: ActivatedRouteSnapshot, handle: {}): void {
        if (route.data.reload && this.getUrl(route)) {
            this.handlers[this.getUrl(route)] = handle;
        }
    }

    shouldAttach(route: ActivatedRouteSnapshot): boolean {
        return !!this.handlers[this.getUrl(route)];
    }

    retrieve(route: ActivatedRouteSnapshot): any {
        if (!this.getUrl(route)) {
            return null;
        }
        return this.handlers[this.getUrl(route)];
    }

    shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
        return future.routeConfig === curr.routeConfig && JSON.stringify(future.params) === JSON.stringify(curr.params);
    }

    getUrl(route: ActivatedRouteSnapshot) {
        if (!route.parent.url.join('/') || !route.url.join('/')){
            return null;
        }
        let url = '';
        if (route.parent.url.join('/')) {
            url += route.parent.url.join('/') + '/';
        }
        if (route.url.join('/')) {
            url += route.url.join('/');
        }
        return url === '' ? null : url;
    }

}


// 2. 在AppModule中配置
@NgModule({
    declarations: [ ... ],
    import: { ... }
    providers: [
        { provide: RouteReuseStrategy, useClass: CustomRouteReuseStrategy }
    ]
})


// 3. 在Routing中配置
const routes: Routes = [
  ...,
  { path: 'class-list', component: ClassListPage, data: { reload: true } }
];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值