angular项目中遇到的问题
一、angular项目中如何实现路由缓存
需要实现的效果,对请求的数据进行缓存,比如进入文章详情页之后点击返回,不会再调用后台数据接口;而是加载缓存中的数据,如何数据变动的情况下,可使用下拉刷新刷新页面数据。类似于vue的keep-alive效果。
将下列代码保存为app-routing.cache.ts文件并保存在app文件夹下:
import { RouteReuseStrategy, DefaultUrlSerializer, ActivatedRouteSnapshot, DetachedRouteHandle } from '@angular/router';
export class AppRoutingCache implements RouteReuseStrategy {
  public static handlers: { [key: string]: DetachedRouteHandle } = {};
  // 表示对路由允许复用
  public shouldDetach(route: ActivatedRouteSnapshot): boolean {
    // 默认对所有路由复用 可通过给路由配置项增加data: { keep: true }来进行选择性使用,代码如下
    // if (!route.data.keep) {
    //   return false;
    // }
    return true;
  }
  // 当路由离开时会触发。按path作为key存储路由快照&组件当前实例对象
  public store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {
    AppRoutingCache.handlers[route.routeConfig.path] = handle;
  }
  // 若path在缓存中有的都认为允许还原路由
  public shouldAttach(route: ActivatedRouteSnapshot): boolean {
    return !!route.routeConfig && !!AppRoutingCache.handlers[route.routeConfig.path];
  }
  // 从缓存中获取快照,若无则返回null
  public retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle {
    if (!route.routeConfig) {
      return null;
    }
    return AppRoutingCache.handlers[route.routeConfig.path];
  }
  // 进入路由触发,判断是否同一路由
  public shouldReuseRoute(future: ActivatedRouteSnapshot, current: ActivatedRouteSnapshot): boolean {
    return future.routeConfig == current.routeConfig;
  }
}
然后在app.module.ts中添加如下代码:
import { RouteReuseStrategy } from '@angular/router';
import { AppRoutingCache } from './app-routing.cache';
修改app.module.ts中的providers: []为如下:
providers: [{ provide: RouteReuseStrategy, useClass: AppRoutingCache }]
采用以上默认设置,则实现整个项目的缓存,如果我们要进行针对性的缓存,可以在配置路由每项时加一个data: {keep: true}的选项,然后在app-routing.cache.ts打开对应注释掉的代码即可。
二、阻止冒泡事件并传参
<div class="right-bottom" (click)="close(item.Id);$event.stopPropagation();">关闭</div>
export class BacklogTaskComponent implements OnInit {
  close(id){
    console.log(id);
  }
}
angular项目中遇到的问题的更多相关文章
- gulp 在 angular 项目中的使用
		gulp 在 angular 项目中的使用 keyword:gulp,angularjs,ng,ngAnnotate,jshint,gulpfile 最后附完整简洁的ng项目gulpfile.js 准 ... 
- angular项目中各个文件的作用
		原文地址 https://www.jianshu.com/p/176ea79a7101 大纲 1.对angular项目中的一些文件的概述 2.对其中一些文件的详细描述 2.1.package.json ... 
- Angular 项目中如何使用 ECharts
		在有些使用 ECharts 库的 Angular 项目中,通常除了安装 npm 包之外,还会在 angular.json 中配置 “build.options.scripts”,将 “node_mod ... 
- angular项目中使用Primeng
		1.第一步把依赖添加到项目中 npm install primeng --save npm install @angular/animations --save npm install font-aw ... 
- Angular项目中引入jQuery
		npm install --save jquery npm install @types/jquery --save 在对应的组件中引入 import * as $ from "jquery ... 
- 在angular项目中使用bootstrap的tooltip插件时,报错Property 'tooltip' does no t exist on type 'JQuery<HTMLElement>的解决方法和过程
		在angular4的项目中需要使用bootstrap的tooltip插件. 1. 使用命令安装jQuery和bootstrap npm install bootstrap jquery --save ... 
- angular项目中使用jquery的问题
		1.使用npm命令往项目中添加jQuery. npm install jquery --save 2.在你想要用jQuery的组件中添加. import * as $ from "jquer ... 
- Angular项目中共享模块的实现
		创建share Modele:ng g m share import进来所有需要共享的模块都export出去, 一.共享CommonModule 暂时只有CommonModule,以后会有一些需要共享 ... 
- Angular项目中核心模块core Module只加载一次的实现
		核心模块CoreModule在整个系统中只加载一次,如何实现? 创建core Modele:ng g m core 既然CoreModule是类,就有构造函数,在构造函数中进行依赖注入. export ... 
随机推荐
- 10.1 Nested vectored interrupt controller (NVIC) 嵌套矢量中断控制器
			特点 60个可屏蔽中断通道(不包含16个Cortex™-M3的中断线): 16个可编程的优先等级(使用了4位中断优先级): 低延迟的异常和中断处理: 电源管理控制: 系统控制寄存器的实现: 1. 中断 ... 
- 牛客练习赛43D Tachibana Kanade Loves Sequence
			题目链接:https://ac.nowcoder.com/acm/contest/548/D 题目大意 略 分析 贪心,首先小于等于 1 的数肯定不会被选到,因为选择一个数的代价是 1,必须选择大于1 ... 
- scrt 关闭退格键声音
			options-> session Options -> Terminal -> audio bell (删除勾选) 这样就可以在secureCRT 在出错时不‘滴滴’的响了. 
- java 传入多个参数时报"Parameter 'XXX' not found. Available parameters are [arg1, arg0, param1,..." 解决方案
			@Select("SELECT id FROM ae_post ORDER BY id DESC LIMIT #{page},#{size}") List<Post> ... 
- 牛客B-Xor Path /// 求所有Path( i->j )( j >= i )路径的异或和
			题目大意: https://ac.nowcoder.com/acm/contest/272/B?&headNav=acm 给定一棵n个点的树,每个点有权值.定义表示 到 的最短路径上,所有 ... 
- 从虚拟地址,到物理地址(开PAE)
			学了好久好久,但是好久好久都没有用过,今天突然要用,都快忘了怎么玩了, 这里记录一下吧. 如何检测PAE r cr4 第5位如果是1,则开了PAE,否则没开 切入目标进程 查找一个自己关注的字符串s ... 
- Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets
			Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession ... 
- Windows7 打开word2003提示:向程序发送命令时出现错误 解决方案
			1.关闭所有打开的Word文档:(包括任务管理器里的进程)2.复制这条命令:%appdata%\microsoft\templates3.开始 → 运行 → 粘贴上面复制的命令 → 确定4.在打开的目 ... 
- PHP算法之回文数
			判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121输出: true示例 2: 输入: -121输出: false解释: 从左向右读, ... 
- Win10下使用默认的照片查看器
			在打开图片的时候默认是 画图,我们想要用windows图片器打开,但是更多应用里面没有这一选项, 按 Windows徽标键+R键,打开运行命令窗口,输入"regedit"命令 来打 ... 
