v-model和.sync的区别
v-model:
v-model 是 Vue.js 框架中的一个指令,用于在表单元素(如输入框、复选框、单选按钮等)和组件之间建立双向绑定。它是 Vue.js 中常用的一个语法糖,可以简化数据的处理和状态同步
v-model 本质上是通过事件监听和属性绑定实现双向绑定,因此它只能应用于支持 input 事件或 change 事件的表单元素上或组件上。
1,使用v-bind绑定了value
2,使用v-on监听了input/change事件,将最新的value赋给变量
v-model.trim---去空格
v-model.number---转number类型
.sync修饰符
作用:实现子组件与父组件数据的双向绑定
特点:prop属性名,可以自定义,非固定value
本质: :属性名 ,@updata:属性名的和写
父组件:
<template>
<div>
<p>父组件: {{ message }}</p>
<ChildComponent :childMessage.sync="message"></ChildComponent>
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue';
export default {
components: {
ChildComponent
},
data() {
return {
message: 'Hello'
};
}
};
</script>
子组件(ChildComponent):
<template>
<div>
<p>子组件: {{ childMessage }}</p>
<button @click="updateMessage">修改父组件的值</button>
</div>
</template>
<script>
export default {
props: {
childMessage: String
},
methods: {
updateMessage() {
this.$emit('update:childMessage', 'New Message');
}
}
};
</script>
注:在 Vue 3 中,.sync 修饰符已被废弃,取而代之的是 v-model 和 emit 的结合使用。
v-model的局限性:
- 数据名必须叫value
- 事件名必须叫input
- 一个标签只能使用一次v-model
解决:v-model局限性------.sync修饰符
异同:
同:v-model 和 .sync 修饰符都用于实现父子组件之间的双向绑定
差异:
- 语法差异:
v-model是一个指令,一般用于表单元素(如输入框、复选框、单选按钮等)或组件上,通过指令绑定一个值来实现双向绑定。.sync是一个修饰符,一般用于组件的 prop 上,通过.sync修饰符来简化父子组件之间的双向绑定。
-
使用方式差异
-
实现细节差异:
v-model隐含着在父子组件之间传递了一个名为value的 prop,以及一个名为input的事件。在子组件内部,通过接收valueprop,并在适当的时候触发input事件来更新父组件数据。.sync修饰符则需要手动定义一个名为${propName}.sync的 prop(其中${propName}是实际的 prop 名称),然后在子组件内通过$emit('update:${propName}', value)来触发一个名为update:${propName}的事件来更新父组件数据。