Angular中怎样通过localStorage实现数据持久化-实现存储搜索历史为例

场景

Angular介绍、安装Angular Cli、创建Angular项目入门教程:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/105570017

Angular新建组件以及组件之间的调用:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/105694997

通过以上搭建起Angular项目。

然后参照以下实现

Angular中实现一个简单的toDoList(待办事项)示例代码:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/105818331

实现简单的搜索功能。

在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

首先新建一个service服务,服务中添加查找与添加和删除的公共方法。

比如这里在app/services目录下创建storage服务

ng g service services/storage

为了实现存储功能,在服务中新建set方法

  set(key,value)
  {
      localStorage.setItem(key,JSON.stringify(value));
  }

为了实现查询功能(记忆/持久化),新建get方法

  get(key)
  {
    //console.log("调用storage中的get方法成功");
    return JSON.parse(localStorage.getItem(key));
  }

为了实现删除功能,新建remove方法

  remove(key)
  {
      localStorage.removeItem(key);

  }

service中完整示例代码

import { Injectable } from '@angular/core' ;

@Injectable({
  providedIn: 'root'
})
export class StorageService {

  constructor() { }

  get(key)
  {
    //console.log("调用storage中的get方法成功");
    return JSON.parse(localStorage.getItem(key));
  }

  set(key,value)
  {
      localStorage.setItem(key,JSON.stringify(value));
  }

  remove(key)
  {
      localStorage.removeItem(key);

  }
}

在applmodule.ts中引入创建的服务

import {StorageService} from './services/storage.service';

并在MgModule里面的providers里面依赖注入服务

 

在使用的页面引入服务并注册服务

这里在search这个组件中调用服务的方法,所以打开search这个组件的ts

import {StorageService} from '../../services/storage.service';

并在构造方法中注册服务

constructor(private storage:StorageService) { }

 

注意这里调用的路径,service服务与组件的位置关系如下

 

这里注册服务时在构造方法中private storage:StorageService,storage名字自己随意起,后面的StorageService要与上面引入时

相对应。

在search这个组件的html中

<h2>搜索</h2>

<div class="search">
  <input type="text" [(ngModel)]="keyword" />  <button (click)="doSearch()">搜索</button>

    <hr>
   
    <ul>
      <li *ngFor="let item of historyList;let key=index;">{{item}}   ------ <button (click)="deleteHistroy(key)">X</button></li>
    </ul>


</div>

ts中对应的方法doSearch在点击后将数据存储并将此搜索历史存入localStorage

  doSearch(){

    if(this.historyList.indexOf(this.keyword)==-1){

      this.historyList.push(this.keyword);
      this.storage.set('searchlist',this.historyList);

    }   
    this.keyword='';   
  }

在重新刷新页面中为了能实现不清空/数据持久化,在ngOnInit中 获取localStorage中值

  ngOnInit(): void {
    var searchlist:any= this.storage.get('searchlist');

    if(searchlist){
      this.historyList=searchlist;       
    }
  }

在删除按钮对应的方法中

  deleteHistroy(key){
     
      this.historyList.splice(key,1);
      this.storage.set('searchlist',this.historyList);
  }

ts中完整示例代码

import { Component, OnInit } from '@angular/core';
import {StorageService} from '../../services/storage.service';

@Component({
  selector: 'app-search',
  templateUrl: './search.component.html',
  styleUrls: ['./search.component.scss']
})
export class SearchComponent implements OnInit {


  public keyword:string;
  public historyList:any[]= [];

  constructor(private storage:StorageService) { }

  ngOnInit(): void {
    var searchlist:any=this.storage.get('searchlist');

    if(searchlist){
      this.historyList=searchlist;       
    }
  }

  doSearch(){

    if(this.historyList.indexOf(this.keyword)== -1){

      this.historyList.push(this.keyword);
      this.storage.set('searchlist',this.historyList);

    }   
    this.keyword='';   
  }

  deleteHistroy(key){
     
      this.historyList.splice(key,1);
      this.storage.set('searchlist',this.historyList);
  }

}

效果

可以在调试模式下的Application的Storage下的localStorage中查看

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值