vue CLI_本地存储、组件自定义事件


1、webStorage(js在浏览器的本地存储)

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

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

  3. 相关API:

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

    ②. xxxxxStorage.getItem('person');

    ? 该方法接受一个键名作为参数,返回键名对应的值。

    ③. xxxxxStorage.removeItem('key');

    ? 该方法接受一个键名作为参数,并把该键名从存储中删除。

    ④. xxxxxStorage.clear()

    ? 该方法会清空存储中的所有数据。

  4. 备注:

    ①. SessionStorage存储的内容会随着浏览器窗口关闭而消失。
    ②. LocalStorage存储的内容,需要手动清除才会消失。
    ③. xxxxxStorage.getItem(xxx)如果xxx对应的value获取不到,那么getItem的返回值是null。
    ④. JSON.parse(null)的结果依然是null。




    
    
    
    localStorage


    
    
    
    
    
    



优化TodoList案例,用本地存储来存数据,只需要修改App里的配置对象的data配置项,和添加监视即可。

        data(){
            return{
                //从本地存储里读取数据,为null就创建一个空数组
                todos:JSON.parse(localStorage.getItem("todos"))||[],
            }
        },
        
        watch:{
          todos:{
            deep:true,//开启深度监视,避免修改了数组里对象的属性watch却没有监视到。
            handler(newVal,oldVal){
              localStorage.setItem("todos",JSON.stringify(newVal));
            }
          }
        },


2、组件的自定义事件

  1. 一种组件间通信的方式,适用于:子组件 ===> 父组件

  2. 使用场景:A是父组件,B是子组件,B想给A传数据,那么就要在A中给B绑定自定义事件(事件的回调在A中)。

  3. 绑定自定义事件:

    1. 第一种方式,在父组件中:

    2. 第二种方式,在父组件中:

      
      ......
      mounted(){
         this.$refs.xxx.$on('atguigu',this.test)
      }
      
    3. 若想让自定义事件只能触发一次,可以使用once修饰符,或$once方法。

  4. 触发自定义事件:this.$emit('atguigu',数据)

  5. 解绑自定义事件this.$off('atguigu')

  6. 组件上也可以绑定原生DOM事件,需要使用native修饰符。

  7. 注意:通过this.$refs.xxx.$on('atguigu',回调)绑定自定义事件时,回调要么配置在methods中要么用箭头函数,否则this指向会出问题!

src\App.vue







src\components\School.vue






src\components\Student.vue