首页 > 其他 > 详细

关于angular2跳路由防止页面刷新的做法(Angular2路由重载)

时间:2020-02-24 17:26:44      阅读:132      评论:0      收藏:0      [点我收藏+]

simpleReuseStrategy.ts

// 创建重用策略
import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';

/**
 * 路由重用策略
 */
export class SimpleReuseStrategy implements RouteReuseStrategy {

    // 保存路由快照
    // [key:string] 键为字符串类型
    // DetachedRouteHandle 值为路由处理器
    // public  handlers: { [key: string]: DetachedRouteHandle } = {};
    public static handlers: { [key: string]: DetachedRouteHandle } = {};

    public static deleteRouteSnapshot(path?: string): void {
        if (!path) {
            SimpleReuseStrategy.handlers = {};
            return;
        }
        const name = path.replace(/\//g, '_');
        if (SimpleReuseStrategy.handlers[name]) {
            delete SimpleReuseStrategy.handlers[name];
        }
    }
    /**
     * 从缓存中获取快照
     * @param {ActivatedRouteSnapshot} route
     * @return {DetachedRouteHandle | null}
     */
    retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {
        return SimpleReuseStrategy.handlers[route.routeConfig.path];
    }

    /**
     * 是否允许还原
     * @param {ActivatedRouteSnapshot} route
     * @return {boolean} true-允许还原
     */
    shouldAttach(route: ActivatedRouteSnapshot): boolean {
        return !!route.routeConfig && !! SimpleReuseStrategy.handlers[route.routeConfig.path];
    }

    /**
     * 确定是否应该分离此路由(及其子树)以便以后重用
     * @param {ActivatedRouteSnapshot} route
     * @return {boolean}
     */
    shouldDetach(route: ActivatedRouteSnapshot): boolean {
        return route.data.reload === false;
    }

    /**
     * 进入路由触发, 判断是否为同一路由
     * @param {ActivatedRouteSnapshot} future
     * @param {ActivatedRouteSnapshot} curr
     * @return {boolean}
     */
    shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
        // future - 未来的(下一个)路由快照
        return future.routeConfig === curr.routeConfig;
    }

    /**
     * 保存路由
     * @param {ActivatedRouteSnapshot} route
     * @param {DetachedRouteHandle | null} handle
     */
    store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle | null): void {
        // 通过 Route.path 映射路由快照, 一定要确保它的唯一性
        // 也可以通过 route.routeConfig.data.uid 或其他可以确定唯一性的数据作为映射key
        // 作者这里能够确保 path 的唯一性
        SimpleReuseStrategy.handlers[route.routeConfig.path] = handle;
    }

}

在app.module.ts里面引入和配置

 providers: [
        { provide: RouteReuseStrategy, useClass: SimpleReuseStrategy },
        { provide: NZ_I18N, useValue: en_US },
        ConfigService, HttpInterceptorProviders
    ],

在相应模块的module里面路由配置末尾加上data: {reload: false}实现路由重载

const routes: Routes = [
    {
        path: '',
        component: AuthorityManagementComponent,
        children: [
            { path: '', redirectTo: 'authority-manage', pathMatch: 'full' },
            { path: 'authority-manage', component: AuthorityManageComponent, data: {reload: false} }, // 路由重载
            { path: 'add-authority', component: AddAuthorityComponent, data: {reload: false} },
            { path: 'follow-setting', component: FollowSettingComponent, data: {reload: false} },
            { path: 'order-setting', component: OrderSettingComponent, data: {reload: false} },
            { path: 'refund-setting', component: RefundSettingComponent, data: {reload: false} },
            { path: 'sales-setting', component: SalesSettingComponent, data: {reload: false} }
        ]
    }
];

关于angular2跳路由防止页面刷新的做法(Angular2路由重载)

原文:https://www.cnblogs.com/yuanchao-blog/p/12357362.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!