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路由重载)的更多相关文章

  1. Vue 实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案

    Vue实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案   by:授客 QQ:1033553122   开发环境   Win 10   Vue 2.9.6   node-v ...

  2. react-navigation的多次点击重复跳转同一页面、不在堆栈路由页面使用navigation方法的解决思路

    一.react-navigation的初使用 createStackNavigator  ==> createSwitchNavigator  ==>  createAppContaine ...

  3. Vue实现远程获取路由与页面刷新导致404错误的解决

    一.背景 先简单介绍一下现在项目情况:前后端分离,后端服务是Java写的,前端是Vue+ElementUI. 最近的一个需求是:通过后端Api去获取前端路由表,原因是每个登录角色对应的前端路由表可能是 ...

  4. vue通过路由实现页面刷新

    vue 开发微信商城项目,需求如下: 购物车页面跳转到详情页,购物车页面包含了多个组件,点击结算跳转到订单页面,从订单返回时,购物车页面没有刷新,由于购物车组件之间通过bus实现事件传递,页面跳转(非 ...

  5. vue 键盘回车事件导致页面刷新的问题,路由多了一个问号

    问题: <el-form @submit.native.prevent> <el-form-item > <el-input @keyup.enter.native=&q ...

  6. vue路由传参刷新丢失

    没有系统学习过vue,以前使用路由传参都是直接this.$router.push({name:'main',params:{'id': 123}})的,没有在路由定义中配置参数,如下: router: ...

  7. vue爬坑之路1-路由跳转全新页面以及二级页面配置

    之前也在网找了一些答案,比较零碎,特此总结下,废话不多说,直接上干货! 路由跳转全新页面 首先在app.vue中先定义router-view,这是主路由. 在router的index.js中引入log ...

  8. 解决angular2页面刷新后报404错误

    如果你的angular项目部署到一个tomcat容器里面,localhost:8080是JavaWeb的主页,localhost:8080/driver/login是你angular2项目的登陆地址. ...

  9. 直击--vue项目微信小程序页面跳转web-view不刷新-根源

    背景 最近项目需要适配小程序,项目是使用了vue开发的网站,其中改造方式是,每个页面都使用小程序创建一个页面通过web-view来显示指定页面的. 在没有使用小程序时,路由跳转时,刷新页面等等,这个是 ...

随机推荐

  1. HDU 2444 The Accomodation of Students【二分图最大匹配问题】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2444 题意:首先判断所有的人可不可以分成互不认识的两部分.如果可以分成 ,则求两部分最多相互认识的对数. ...

  2. 编程作业2.1:Logistic regression

    题目 在这部分的练习中,你将建立一个逻辑回归模型来预测一个学生是否能进入大学.假设你是一所大学的行政管理人员,你想根据两门考试的结果,来决定每个申请人是否被录取.你有以前申请人的历史数据,可以将其用作 ...

  3. PAT Advanced 1145 Hashing – Average Search Time (25) [哈希映射,哈希表,平⽅探测法]

    题目 The task of this problem is simple: insert a sequence of distinct positive integers into a hash t ...

  4. js分页的一些思考

    一两年之前在写java的时候,分页的逻辑是写在后端的,用java去实现,jsp是动态展示页码和数据.但是对于一个用ajax加载的分页数据来说,分页的逻辑必须也在前端完成,那么就不得不去思考一下在js里 ...

  5. ubuntu Elasticsearch环境搭建

    https://www.cnblogs.com/pigzhu/p/4705870.html

  6. office 无法打开xlsx文件的问题

    1. 设置content-type和header response.setContentType("application/vnd.openxmlformats-officedocument ...

  7. 关于前端Dom的总结

    简介 DOM (Document Object Model) 文档对象模型 DOM思想使用节点树(node tree)的概念来描述一个HTML页面,页面中的每一个元素.属性.文本都被认为是节点.此外, ...

  8. uboot 编译

    . 解包u-boot源码包(u-boot-2016.07) . 配置交叉编译器 根据内核编译里的步骤配置 . 编译uboot yum install ncurses* // ncurses是个终端的图 ...

  9. Hibernate相关概念及序列化和持久化的区别

    hibernate是一种ORM(object relation mapping,对象关系映射)框架,所谓的对象关系映射,通俗的说,就是把JAVA对象保存到关系型数据库中. hibernate要做的事, ...

  10. js 判断元素的display是否为block或者none

    if($(this).css("display")=="none"){ //隐藏的 }else{ //显示的 }