v-model, .sync ,vue2中两个语法糖的基本使用

260 阅读1分钟
  1. 什么是v-model,以及使用方法

  2. 什么是.sync,以及使用方法

1.什么是v-model

v-model是Vue.js框架中的一个指令,用于在表单元素和Vue实例数据之间双向绑定。它通常用于input、textarea、select等表单元素上。

例如,你可以使用v-model将一个文本框与Vue实例中的一个数据属性绑定起来,当用户在文本框中输入时,这个属性的值也会随之改变;而当Vue实例中的这个数据属性的值改变时,文本框的内容也会自动更新。

<template>
  <div>
    <input v-model="message" type="text">
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  }
}
</script>

上列代码中,在文本框中输入内容,message也会自动更新

v-model的本质是,给文本框绑定了一个value,以及input事件,将值改变之后,触发input事件,然后将value赋值给message.

其他使用场景: 

一般会在父子之间涉及到input的传值时候,可以用v-model语法糖来实现,可以使代码更加简便,具体实现如下:

// 父组件
<template>
<children v-model="message"/>  // 在子组件上绑定v-model
</template>
<script>
export default {
  data(){
   return {
     message: '11'
    }  
  }
}
</script>

// 子组件
<template>
<input type="text" :value="value" @change="handleChange"/>
</template><script>
export default {
 props:{
  value:{   // 此处需要用到value接收
    type:String,
    required: true
  }
 },
 methods:{
  handleChange(){
    this.$emit('input', 修改的值)  // 此处需要用到input事件,然后将需要修改的值填入
   }
 }
}
</script>

上列代码的意思为,当子组件文本框输入内容的时候,发生改变的时候,就会将你要传的值,给父组件,然后父组件会存到message里面

v-model的传值只能用value吗? 或者只能用input事件吗? 

当然不是,下面将介绍使用其他事件的方法

 model: {    prop: 'checked',    event: 'change'  },
// 在props前面加这一项,接收值就是checked,监听事件就是change

2.什么是.sync

v-model是Vue.js框架中的一个指令,用于在表单元素和Vue实例数据之间双向绑定。它通常用于input、textarea、select等表单元素上。

例如,你可以使用v-model将一个文本框与Vue实例中的一个数据属性绑定起来,当用户在文本框中输入时,这个属性的值也会随之改变;而当Vue实例中的这个数据属性的值改变时,文本框的内容也会自动更新。

<!-- 父组件 -->
<template>
  <div>
    <child-component :message.sync="parentMessage"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      parentMessage: ''
    }
  }
}
</script>

<!-- 子组件 -->
<template>
  <div>
    <input 
      :value="message" 
      @input="$emit('update:message', $event.target.value)">
  </div>
</template>

<script>
export default {
  props: {
    message: ''
  }
}
</script>

在上面的代码中,子组件的@input事件将通过$emit方法携带新的值触发“update:message”事件,父组件则通过.sync指令监听该事件,从而实现父子组件之间的双向绑定。