vue3+ts学习(二十二):vue2的生命周期与组件中使用v-model

17 阅读1分钟

vue2的生命周期

组件在创建(beforecreate,created)、挂载(beforemount,mounted)、更新(beforeupdate,updated)、卸载(beforeunmount,unmounted)的过程,执行回调。

父组件挂载的时候,子组件就开始创建挂载,完成后父组件完成挂载

在缓存组件keep-alive里的组件,多次切换该组件不会创建和销毁,vue新增了两个生命周期来监听切换事件。当进入到该组件时调用activated() 函数,当离开该组件时调用deactivated() 函数

组件的v-model使用

实际上就是父子组件共用同一个数据并双向绑定,在表单组件用较多

父组件使用v-model绑定数据传给子组件,更新数据的方法名为update:modelValue

    <h1>{{ message }}</h1>
    <h1>{{ name }}</h1>

    <Message v-model="message"></Message>
    <!-- 等价于下行,默认传的属性名叫modelValue 更新数据的方法名为update:modelValue -->
    <!-- <Message :modelValue="message" @update:modelValue="message = $event"></Message> -->

    <!-- 设置名称,传多个v-model -->
    <Message v-model:msg="message" v-model:name="name"></Message>

子组件,这样改变子组件input的值 父组件也会双向绑定修改

    <!-- 实现与父组件双向绑定的方法 -->
    <input type="text" :value="modelValue" @input="changeVal">

    <!-- 绑定props的值是不对的,props的值是只读不可改的,但可以通过计算属性获取 -->
    <input type="text" v-model="thisMsg" >
    <input type="text" v-model="thisName" >
    
    props: {
        msg: String,
        name: String,
    },
    emits: ["update:msg","update:name"],
    methods: {
        changeVal(event){
          this.$emit("update:msg", event.target.value)
        }
    },
    computed: {
        thisMsg: {
          set(value){
            this.$emit("update:msg", value)
          },
          get(){
            return this.msg
          }
        },
        thisName: {
          set(value){
            this.$emit("update:name", value)
          },
          get(){
            return this.name
          }
        }
    }