开始使用 - 图1 This article has not been translated, hope that your can PR to translated it. Help us!开始使用 - 图2

开始使用

写在前面

通常把一些远程数据缓存在内存或 localStorage 持久化,目的是为了减少 Http 请求的成本;这样的数据通常是字典、城市数据等。

缓存的获取应该是非常简单的,我们不应该把时间浪费在如何保证加载这件事情上,因此 @delon/cache 更多是以约定为前提。key 作为缓存的唯一键值,它不应该只是单纯的一个标识符,如果遵守某种约定它的存在会更有价值。@delon/cache 默认情况下不光把 key 当作唯一标识符,同时它还是一个用于获取远程数据的有效HTTP,例如:

  1. cacheService.get('/data/unit');

在以往我们会认为,在它之前应该需要加一个:

  1. cacheService.set('/data/unit', [ '个', '件' ]);

才能够确保获取到缓存数据。

而对于 @delon/cache 而言,你无须 set 方法,直接使用 get 获取到单位字典,因为我们有一种约定,当缓存不存在透过 key 作为HTTP请求数据缓存后再返回。

缓存的获取与设置都是通过 CacheService 来操作,你只需要将 CacheService 导入对应的类当中即可。

如何使用

安装

  1. yarn add @delon/cache

注册

在根模块 AppModule 导入 DelonCacheModule

  1. import { DelonCacheModule } from '@delon/cache';
  2. @NgModule({
  3. imports: [
  4. DelonCacheModule
  5. ]
  6. })

建议在根模块中导入,因为它只有 Service 为了防止重复被导入。

参数

成员说明类型默认值全局配置
[mode]promise,nonepromise缓存模式;promise 约定模式,允许 key 作为 http 获取数据;none 正常模式
[reName]string-重命名返回参数,例如:
null 返回体为内容
list 返回体应 { list: [] }
result.list 返回体应 { result: { list: [] } }
[expire]number-设置默认过期时间值(单位:秒)
[prefix]string-持久化数据键值前缀
[meta_key]string__cache_meta持久化数据元数据存储键名

可以通过全局配置覆盖它们。

代码演示

开始使用 - 图3

基础样例

最简单的用法。

  1. import { Component, OnDestroy } from '@angular/core';
  2. import { CacheService } from '@delon/cache';
  3. import { NzMessageService } from 'ng-zorro-antd/message';
  4. import { Subscription } from 'rxjs';
  5. @Component({
  6. selector: 'cache-getting-started-simple',
  7. template: `
  8. <p>value: {{ value | json }}</p>
  9. <div class="pt-sm">
  10. Basic:
  11. <button nz-button (click)="srv.set(key, newValue)">Set</button>
  12. <button nz-button (click)="value = srv.getNone(key)">Get</button>
  13. <button nz-button (click)="srv.remove(key)">Remove</button>
  14. <button nz-button (click)="srv.clear()">Clear</button>
  15. </div>
  16. <div class="pt-sm">
  17. Key is valid request:
  18. <button nz-button (click)="getByHttp()">Get</button>
  19. </div>
  20. <div class="pt-sm">
  21. Notify:
  22. <button nz-button (click)="registerNotify()">Register</button>
  23. <button nz-button (click)="unRegisterNotify()">UnRegister</button>
  24. </div>
  25. `,
  26. })
  27. export class CacheGettingStartedSimpleComponent implements OnDestroy {
  28. value: any;
  29. key = 'demo';
  30. private notify$: Subscription;
  31. get newValue() {
  32. return +new Date();
  33. }
  34. constructor(public srv: CacheService, private msg: NzMessageService) {}
  35. getByHttp() {
  36. this.srv.get(`https://randomuser.me/api/?results=1`).subscribe(res => {
  37. this.value = res;
  38. });
  39. }
  40. registerNotify() {
  41. if (this.notify$) this.notify$.unsubscribe();
  42. this.notify$ = this.srv.notify(this.key).subscribe(res => {
  43. if (res == null) {
  44. this.msg.success('register success');
  45. return;
  46. }
  47. this.msg.warning(`"${this.key}" new status: ${res.type}`);
  48. });
  49. }
  50. unRegisterNotify() {
  51. this.srv.cancelNotify(this.key);
  52. }
  53. ngOnDestroy() {
  54. if (this.notify$) this.notify$.unsubscribe();
  55. }
  56. }