数据保存至LocalStorage

简介: 数据保存至LocalStorage

数据保存至LocalStorage


1. 获取用户最新选择的 Tags

// Tags.Vue
this.$emit('xxx', this.selectedTags)
//Money.Vue
<Tags :data-source.sync="tags" @xxx="yyy"/>
yyy(zzz:string[]){
  console.log(zzz);
}
  • 改名:
// Tags.Vue
this.$emit('update:selected', this.selectedTags)
//Money.Vue
<Tags :data-source.sync="tags" @update:selected="onUpdateTags"/>
onUpdateTags(tags:string[]){
  console.log(tags);
}

2. 同理获取用户最新输入的 Notes,Types,NumberPad

// Money.vue
<Layout class-prefix="layout">
  <NumberPad @update:value="onUpdateAmout"/>
  <Types @update:value="onUpdateType"/>
  <Notes @update:value="onUpdateNotes"/>
  <Tags :data-source.sync="tags" @update:value="onUpdateTags"/>
</Layout>
export default class Money extends Vue{
    tags = ["衣","食","住","行"]
    onUpdateTags(value:string[]){
      console.log(value);
    }
    onUpdateNotes(value:string){
      console.log(value);
    }
    onUpdateType(value:string){
      console.log(value)
    }
    onUpdateAmout(value:string){
      console.log(value)
    }
  }

3. TS 中如何使用 Watch

  • Notes.vue 的 input 中每次用户输入都要向 Money.vue 更新数据
// Tag.vue
export default class Notes extends Vue{
  value = '';
  @Watch('value')
  onValueChanged(value:string ){
    this.$emit('update:value',value)
  }
}

4. TS 中的类型声明-将所有数据记录

type Record = {
  tags!: string[] // !表示可以没有这个属性
  notes: string
  type: string
  amount: number
}
record: Record = {
  tags: [],notes:'',type:'-',amount:0
}

5. 把值重新传回 types,方便维护

  • 如果你想给组件一个初始值,然后更新的时候时候,又要拿到最新的值,就用.sync
//Types.Vue
  // 这样就不需要之前的watch
   export default class Types extends Vue {
    @Prop() readonly value!: string;
    selectType(value: string) {
      if (value !== "-" && value !== "+") {
        throw new Error("type is unknown")
      }
      this.$emit('update:value', value)
    }
  }
  // Money.Vue
    <Types :value="record.type" @update:value="onUpdateType"/>
  // 可以简写成
  <Types :value.sync="record.type" />

6. 解决 push 进数组数据一样的 bug

  • 此 bug 产生的原因,push 进去的实际上是一个内存地址\
  • 解决的办法:深拷贝
saveRecord(){
      const record2  = JSON.parse(JSON.stringify(this.record));
      this.recordList.push(record2)
      console.log(this.recordList)
    }

7. 解决增加时间引起的数据库版本的问题

  • 不要一下子升级到最新版,要一个个版本的升级。\
if (version === "0.0.1") {
    // 数据库升级, 数据迁移
    recordList.forEach(record => {
      record.createdAt = new Date(2020, 0, 1);
    })
    // 保存数据
    window.localStorage.setItem("recordList", JSON.stringify(recordList))
  }
  window.localStorage.setItem("version", "0.0.2")


相关文章
|
前端开发 JavaScript 数据安全/隐私保护
Layui之动态树(树形菜单)详解1
Layui之动态树(树形菜单)详解1
710 0
|
前端开发 Android开发
使用Android Studio(AS)查看apk信息
使用Android Studio(AS)查看apk信息
911 0
使用Android Studio(AS)查看apk信息
|
4月前
|
JavaScript 前端开发 开发者
09.HarmonyOS Next数据驱动UI开发:ForEach与动态渲染完全指南(上)
在现代前端开发中,数据驱动UI已成为主流开发范式。HarmonyOS Next的ArkTS语言和声明式UI框架完美支持这一理念,使开发者能够以更高效、更直观的方式构建复杂应用。
118 1
|
存储 SQL 大数据
Pandas DataFrame 数据存储格式比较
Pandas 支持多种存储格式,在本文中将对不同类型存储格式下的Pandas Dataframe的读取速度、写入速度和大小的进行测试对比。
391 0
|
10月前
|
API 容器
【HarmonyOS Next开发】Navigation使用
Navigation是路由容器组件,包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。适用于模块内和跨模块的路由切换。 在页面跳转时,应该使用页面路由router,在页面内的页面跳转时,建议使用Navigation达到更好的转场动效场景。
433 8
【HarmonyOS Next开发】Navigation使用
|
10月前
|
存储 JavaScript 前端开发
JavaScript中的数据类型以及存储上的差别
通过本文的介绍,希望您能够深入理解JavaScript中的数据类型及其存储差别,并在实际编程中灵活运用这些知识,以提高代码的性能和稳定性。
212 3
|
10月前
|
IDE 开发工具
【开发IDE升级】如何对IDEA版本进行升级
本文介绍了如何将 IntelliJ IDEA Ultimate 从 2020.2.2 版本升级到 2022.3.2 版本。主要内容包括准备工作、卸载旧版本和安装新版本的步骤。首先,从官网下载所需版本并备份旧版配置;接着,通过 Uninstall.exe 卸载旧版,保留配置和插件;最后,安装新版并完成激活。详细的操作步骤和截图帮助用户顺利完成升级过程。
11444 1
【开发IDE升级】如何对IDEA版本进行升级
|
11月前
|
存储 编解码 算法
发到朋友圈的图片为什么会变糊?iPhone的live实况图是什么格式的图片?
本文介绍了iPhone Live实况图的格式(.livp)、社交平台图片变糊的原因、图像编码压缩的基本过程(变换、量化、熵编码),以及HEIF格式及其与HEVC的关系。HEIF格式具有体积小、颜色丰富、内容灵活等优势,适用于高效图像存储与传输。
|
监控 安全 网络架构
深入解析子网划分的目的和关键步骤
【8月更文挑战第25天】
554 0
|
机器学习/深度学习 人工智能 自然语言处理
AI顶会ICLR 2022 | WPipe 蚂蚁集团大规模 DNN 训练的流水线并行技术
AI顶会ICLR 2022 | WPipe 蚂蚁集团大规模 DNN 训练的流水线并行技术
1049 0
AI顶会ICLR 2022 | WPipe 蚂蚁集团大规模 DNN 训练的流水线并行技术