Vue 浏览器本地存储

发布于:2025-07-24 ⋅ 阅读:(34) ⋅ 点赞:(0)

一、webStorage

        1.存储内容大小一般支持5MB左右(不同浏览器可能不一样)。

        2.浏览器通过Window.sessionStorage 和 Window.localStorage属性来实现本地存储机制。

        3.相关API:

                (1).xxxxStorage.setItem('Key','value'):该方法接受一个键和值作为参数,会把键值对添加到存储中,如果键名存在,则更新其对应的值。

                (2).xxxxStorage.getItem('person'):该方法接受一个键名作为参数,返回键名对应的值。

                (3).xxxxStorage.removeItem('Key'):该方法接受一个键名作为参数,并把该键名从存储中删除。

                (4).xxxxStorage.clear():该方法会清空存储中的所有数据。

        4.备注:

                (1).sessionStorage存储的内容会随着浏览器窗口关闭而消失。

                (2).localStorage存储的内容,需要手动清除才会消失。

                (3).xxxxStorage.getItem('xxx')如果对应的value获取不到,那么getItem的返回值是null。

                (4).JSON.parse(null)的结果依然是null。

/* localStorage */
<body>
    <h1>localStorage</h1>
    <button onclick="saveData()">点我存储一个数据</button>
    <button onclick="readData()">点我读取一个数据</button>
    <button onclick="deleteData()">点我删除一个数据</button>
    <button onclick="deleteAllData()">点我清除一个数据</button>

    <script>
        let obj ={name:'张三',age:18}
        function saveData(){
            console.log(1)
            localStorage.setItem('msg','你好')
            localStorage.setItem('msg2','localStorage')
            localStorage.setItem('person',JSON.stringify(obj))
        }
        function readData(){
            console.log(localStorage.getItem('msg'))
            
            console.log(localStorage.getItem('msg2'))
            
            let e = localStorage.getItem('person')
            console.log(JSON.parse(e))
            
        }
        function deleteData(){
            localStorage.removeItem('msg')
        }
        function deleteAllData(){
            localStorage.clear()
        }
    </script>
</body>

/* sessionStorage */
<body>
    <h1>sessionStorage</h1>
    <button onclick="saveData()">点我存储一个数据</button>
    <button onclick="readData()">点我读取一个数据</button>
    <button onclick="deleteData()">点我删除一个数据</button>
    <button onclick="deleteAllData()">点我清除一个数据</button>

    <script>
        let obj ={name:'张三',age:18}
        function saveData(){
            console.log(1)
            sessionStorage.setItem('msg','你好')
            sessionStorage.setItem('msg2','localStorage')
            sessionStorage.setItem('person',JSON.stringify(obj))
        }
        function readData(){
            console.log(sessionStorage.getItem('msg'))
            
            console.log(sessionStorage.getItem('msg2'))
            
            let e = sessionStorage.getItem('person')
            console.log(JSON.parse(e))
            
        }
        function deleteData(){
            sessionStorage.removeItem('msg')
        }
        function deleteAllData(){
            sessionStorage.clear()
        }
    </script>
</body>

二、TodoList_本地存储

        利用localStorage.setItem 和 localStorage.getItem的存储和读取机制来动态存储TodoList的数据。通过watch监视todoList数据的变动,每当数组修改,就会用新的数组覆盖掉浏览器本地存储中的旧数组。

<template>
  <div class="centent">
    <Add 
      :addTodo="addTodo"
    />
    <todoList 
      :todoList="todoList" 
      :todoDelete="todoDelete" 
      :itemCheckChange="itemCheckChange"
    />
    <allTodo 
      :todoList="todoList" 
      :allTodoDelete="allTodoDelete"
      :toggleAll="toggleAll"
    />
  </div>
</template>

<script>
    import Add from './Components/Add.vue'
    import todoList from './Components/todoList.vue';
    import {nanoid} from 'nanoid'
    import allTodo from './Components/allTodo.vue';

    export default {
      name:'App',
      data() {
        return {
          todoList: JSON.parse(localStorage.getItem('todoList')) || []
        }
      },
      components:{Add,todoList,allTodo},
      methods:{
        addTodo(x){
          if(x.text.trim()){
            this.todoList.unshift(x)
          }
        },
        allTodoDelete(){
          this.todoList = this.todoList.filter(item => !item.is_check)
        },
        todoDelete(id){
          this.todoList = this.todoList.filter(item=>item.id!=id)
        },
        itemCheckChange(id){
          this.todoList.forEach(item=>{
            if(item.id === id) item.is_check =!item.is_check
          })
        },
        toggleAll(value){
          this.todoList.forEach(item => {
            item.is_check=value
          })
        }
      },
      watch:{
        todoList:{
          deep:true,
          handler(value){
            localStorage.setItem('todoList',JSON.stringify(value))
          }
        }
      }
    }
</script>

<style scoped>
  .centent{
    width: 400px;
    margin: auto;
    border: 1px  solid #000;
    min-height: 50px;
    padding: 20px;
  }
</style>

网站公告

今日签到

点亮在社区的每一天
去签到