数据保存至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")


相关文章
|
7月前
|
存储
存储对象sessionStorage与localStorage
存储对象sessionStorage与localStorage
63 0
|
7月前
|
存储 缓存 JavaScript
cookie、localStorage 和SessionStorage的区别和特点?
cookie、localStorage 和SessionStorage的区别和特点?
93 0
|
3月前
|
存储 移动开发 HTML5
SessionStorage 和 LocalStorage 有什么区别?
SessionStorage 和 LocalStorage 有什么区别?
251 3
|
2月前
|
存储 移动开发 数据管理
localStorage 和 sessionStorage 的相同与不同
`localStorage` 和 `sessionStorage` 是 HTML5 提供的两种 Web 存储机制,用于在用户的浏览器中存储数据。它们都采用键值对形式存储字符串数据,并遵循同源策略,容量约为 5-10 MB。两者均支持 `setItem`、`getItem` 等方法。主要区别在于存储期限和作用域:`localStorage` 数据持久化,适用于用户偏好设置等长期存储;`sessionStorage` 数据仅限当前会话,适用于表单信息等临时数据。根据需求选择合适的存储方式可提升用户体验和数据管理效率。
|
5月前
|
存储 Web App开发 移动开发
js【详解】本地存储 Cookie、sessionStorage、localStorage
js【详解】本地存储 Cookie、sessionStorage、localStorage
161 0
|
7月前
|
存储 缓存 移动开发
localstorage是什么
localstorage是什么
143 1
|
7月前
|
存储 缓存 前端开发
localStorage
localStorage 是一种浏览器本地存储技术,它可以在用户浏览器中存储数据,包括文本、图像、文件等等。相比于会话存储(sessionStorage),localStorage 的存储时间更长,可以跨多个会话保持数据。因此,localStorage 常常用于存储一些长时间需要保留的数据,例如用户设置、偏好、登录状态等等。 使用 localStorag
83 8
|
7月前
|
存储 JSON 数据格式
localStorage和sessionStorage的使用和区别
localStorage和sessionStorage的使用和区别
78 0
localStorage和sessionStorage的使用和区别
|
存储 缓存 前端开发
前端存储之sessionStorage和localStorage
前端存储之sessionStorage和localStorage
299 0
|
存储 JavaScript
vuex、localStorage、sessionStorage 存储区别
vuex、localStorage、sessionStorage 存储区别
146 0