美文网首页
v-model实现父子组件间的双向绑定

v-model实现父子组件间的双向绑定

作者: zzyo96 | 来源:发表于2020-02-11 22:01 被阅读0次

    原文地址:https://www.cnblogs.com/elsonww/p/11305806.html

    参考文档:https://cn.vuejs.org/v2/api/#model

    背景:在工作中封装组件的时候有用到双向绑定
    // 父组件
    <template>
      <div id="app">
       // 使用 input 组件,使用 v-model
        <sp-input v-model="value"></sp-input>
        <button @click="Console">显示value</button>
      </div>
    </template>
    
    <script>
    import input from "../src/components/input";
    export default {
      name: "App",
      data() {
        return {
          // 定义 input 需要的 value属性
          value: ''
        };
      },
      components: {
        "sp-input": input
      },
      methods: {
        Console() {
          console.log(this.value)
          alert(this.value);
        }
      }
    };
    </script>
    
    //子组件
    <template>
      <div>
        // 封装 input 标签,v-model绑定computed属性
        <input type="text" v-model="InputValue" /
      </div>
    </template>
    
    <script>
    export default {
      name: "sp-input",
      // 定义model属性
      model: {
       // prop即 父组件使用 v-model 绑定的属性,这个名称是自定义的
        prop: "value",
        // event即 子组件会向父组件触发的事件,父组件的 v-model可以监听到这个事件,并将vlaue赋值给v-model绑定的属性
        event: "input"
      },
      props: {
        // 这里的 prop 定义必须与 model中定义的 prop 同名
        value: String
      },
      computed: {
        // 定义一个计算属性,给子组件的 v-model使用
        InputValue: {
          // 计算属性的 get 返回父组件传入的 value,即model,props中定义的 prop
          get() {
            return this.value;
          },
          set(value) {
            //向父组件触发事件,此事件为model中定义的event,子组件v-model绑定了该计算属性,输入时会触发计算属性的set方法,即向父组件触发该事件
            this.$emit("input", value);
          }
        }
      }
    };
    </script>
    
    

    相关文章

      网友评论

          本文标题:v-model实现父子组件间的双向绑定

          本文链接:https://www.haomeiwen.com/subject/vxuiwctx.html