特点:双向绑定
数据=>视图
视图=>数据
场景:
原理:
v-model只是个语法题,本质是:v-model = v-bind (:value) + v-on (@input)
<template>
<div id="app">
<p>{{ text }}p>
<input type="text" v-model="text">
<input type="text" :value="text" @input="(e) => (text = e.target.value)" />
div>
template>
<script>
export default {
name: "app",
data() {
return {
text: "xxxxxxxx",
};
},
};
script>
<style>
style>
为什么要在组件上使用v-model,我们的目的是?
怎么做?
v-model其实就是 :value和@input事件的简写
例子
App.vue
<template>
<div id="app">
<my-select v-model="city">
my-select>
div>
template>
<script>
import MySelect from "./components/MySelect.vue";
export default {
name: "app",
components: {
MySelect,
},
data() {
return {
city: 104,
};
},
};
script>
<style>
style>
MySelect.vue
<template>
<div>
<select :value="value" @change="selectCity">
<option value="101">北京option>
<option value="102">上海option>
<option value="103">武汉option>
<option value="104">广州option>
<option value="105">深圳option>
select>
div>
template>
<script>
export default {
props: {
value: String,
},
methods: {
selectCity(e) {
this.$emit("input", e.target.value);
},
},
};
script>
<style>
style>
.sync 是一个修饰符,用于在自定义组件中实现父子组件之间的双向数据绑定。
.sync主要应用于自定义组件之间的数据传递和状态管理,可以实现父子组件之间的双向数据流。通过 .sync,可以将父组件的数据传递给子组件,并且子组件可以修改这个数据并将修改的结果传递回父组件。
我们知道,vue中父组件是使用v-bind(缩写为:)给子组件传入参数,然后子组件通过prop属性接收该参数。此时我们可以给子组件传入一个函数,子组件通过调用传入的函数来改变父组件中参数的值。
即主要部分如下所示
<!-- 父组件给子组件传入一个setNum函数 -->
<child :num="numParent" @setNum="(res)=> numParent = res"></child>
//子组件通过调用这个函数来实现修改父组件的状态
methods: {
changNum(){
this.$emit('setNum',666)
}
此时子组件只需要触发changNum
函数就能执行父组件中的setNum
函数从而改变父组件中numParent
的值
上述方法较复杂,使用sync可简化写法
<!-- 父组件给子组件传入一个setNum函数 -->
<child :num.sync="numParent">
//子组件通过调用这个函数来实现修改父组件的状态
methods: {
changNum(){
this.$emit('update:num',666)
}
上述两种方式都可以将numParent的值由222变为666,其中父组件中绑定的参数后面加了一个.sync,子组件中的事件名称被换成了update:age,如下:
vue考虑到组件的可维护性,是不允许子组件改变父组件传的props值的。父组件通过绑定属性的方式向子组件传值,而在子组件中可以通过$emit向父组件通信(通过1.1方式),通过这种间接的方式改变父组件的data,从而实现子组件改变props的值。
那么同时,vue中也提供了一种解决方案.sync修饰符(1.2方式)
允许子组件改变父组件传的props值的。父组件通过绑定属性的方式向子组件传值,而在子组件中可以通过$emit向父组件通信(通过1.1方式),通过这种间接的方式改变父组件的data,从而实现子组件改变props的值。