v-model的实现原理

作者: 姜治宇 | 来源:发表于2020-08-21 12:27 被阅读0次

vue中的v-model很好用,我们经常用它做双向绑定:

<template>
  <div id="app">
    {{username}} <br/>
    <input type="text" v-model="username">
  </div>
</template>

<script>
export default {
  name: 'App',
  data(){
    return {
      username:''
    }
  }

}
</script>

v-model其实是个语法糖,它实际上是做了两步动作:
1、绑定数据value
2、触发输入事件input
也就是说,v-model等同于:

<template>
  <div id="app">
    {{username}} <br/>
    <input type="text" :value="username" @input="username=$event.target.value">
  </div>
</template>

<script>
export default {
  name: 'App',
  data(){
    return {
      username:''
    }
  }

}
</script>

明白了这一点非常有用,我们可以在自定义的input组件中使用它:

<template>
  <div id="app">
    {{username}} <br/>
    <my-input type="text" v-model="username"></my-input>
  </div>
</template>

<script>
import myinput from './components/myinput'
export default {
  name: 'App',
  components:{'my-input': myinput},
  data(){
    return {
      username:''
    }
  }

}
</script>

myinput.vue:

<template>
    <div class="my-input">
        <input type="text" class="my-input__inner" @input="handleInput"/>
    </div>
</template>

<script>
    export default {
        name: "myinput",
        props:{
            value:{ //获取父组件的数据value
                type:String,
                default:''
            }
        },
        methods:{
            handleInput(e){
                this.$emit('input',e.target.value) //触发父组件的input事件
            }
        }
    }
</script>

<style lang="scss" scoped>
    .my-input {
        width: 180px;
        position: relative;
        font-size: 14px;
        display: inline-block;
    .my-input__inner {
        -webkit-appearance: none;
        background-color: #fff;
        background-image: none;
        border-radius: 4px;
        border: 1px solid #dcdfe6;
        box-sizing: border-box;
        color: #606266;
        display: inline-block;
        font-size: inherit;
        height: 40px;
        line-height: 40px;
        outline: none;
        padding: 0 15px;
        transition: border-color .2s cubic-bezier(.645,.045,.355,1);
        width: 100%;

    &:focus {
         outline: none;
         border-color: #409eff;
     }
    }
    }
</style>

相关文章

  • v-model 控制组件显示隐藏

    1、v-model原理 监听了 input事件 2、实现

  • v-model语法糖

    原理: v-model是value+input的语法糖,是v-band和v-on的简洁写法。v-model就实现了...

  • v-model双向绑定原理 实现自定义v-model命令

    v-model双向绑定原理,实现自定义v-model 本文会随着时间进行更正 再次更新:2019/10/16 15...

  • v-model原理

    1. v-model是什么? 在表单控件或者组件上实现双向绑定 2. v-model 原理: vue的双向绑定是由...

  • vue表单

    vue中表单主要通过v-model实现数据的双向绑定,实现原理主要通过javascript的object.defi...

  • Vue之v-model

    目标:1、了解v-model的本质。2、了解v-model的实现原理。 我们知道Vue的核心特性之一是双向绑定,v...

  • vue中的v-model原理,与组件自定义v-model

    VUE中的v-model可以实现双向绑定,但是原理是什么呢?往下看看吧 根据官方文档的解释,v-model其实是一...

  • v-model的实现原理

    vue中的v-model很好用,我们经常用它做双向绑定: v-model其实是个语法糖,它实际上是做了两步动作:1...

  • 7.v-model的原理

    v-model的实现原理:首先,通过属性绑定value,然后通过input事件,来动态的修改msg的值,来实现v-...

  • 浅谈v-model双向绑定

    vue的响应式原理是实现了数据->视图,接下来我们要学习 视图->数据的原理。 v-model用于表单数据的双向绑...

网友评论

    本文标题:v-model的实现原理

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