Vue3.js:自定义组件 v-model

Vue3的自定义v-model和vue2稍有不同

文档

目录

原生组件

html 复制代码
<input v-model="searchText" />

等价于

html 复制代码
<input
  :value="searchText"
  @input="searchText = $event.target.value"
/>

自定义组件

html 复制代码
<CustomInput v-model="searchText" />

等价于

html 复制代码
<CustomInput
  :model-value="searchText"
  @update:model-value="newValue => searchText = newValue"
/>

CustomInput实现代码1

html 复制代码
<!-- CustomInput.vue -->
<script>
export default {
  props: ['modelValue'],
  emits: ['update:modelValue']
}
</script>

<template>
  <input
    :value="modelValue"
    @input="$emit('update:modelValue', $event.target.value)"
  />
</template>

CustomInput实现代码2

html 复制代码
<!-- CustomInput.vue -->
<script>
export default {
  props: ['modelValue'],
  emits: ['update:modelValue'],
  
  computed: {
    value: {
      get() {
        return this.modelValue
      },
      set(value) {
        this.$emit('update:modelValue', value)
      }
    }
  }
}
</script>

<template>
  <input v-model="value" />
</template>

v-model 的参数

默认使用的是modelValue, 可以自定义参数名

html 复制代码
<MyComponent v-model:title="bookTitle" />

组件实现

html 复制代码
<!-- MyComponent.vue -->
<script>
export default {
  props: ['title'],
  emits: ['update:title']
}
</script>

<template>
  <input
    type="text"
    :value="title"
    @input="$emit('update:title', $event.target.value)"
  />
</template>
相关推荐
克喵的水银蛇4 分钟前
Flutter 弹性布局实战:快速掌握 Row/Column/Flex 核心用法
开发语言·javascript·flutter
脾气有点小暴7 分钟前
ES6(ECMAScript 2015)基本语法全解析
前端·javascript
前端fighter7 分钟前
全栈项目:闲置二手交易系统(二)
前端·vue.js·node.js
sztian6810 分钟前
JavaScript---BOM对象、JS执行机制、location对象
开发语言·前端·javascript
潘小安15 分钟前
【译】别再想着 Figma 了,AI 才是新的设计工具
前端·ai编程·weui
少寒25 分钟前
async/await:异步编程的优雅解决方案
前端·javascript
华仔啊29 分钟前
CSS的clamp()函数:一行代码让网页自适应如此简单
前端·css
wordbaby32 分钟前
React 误区粉碎:useEffectEvent 是“非响应式”的,所以它不会触发重渲染?
前端·react.js
计算机学姐36 分钟前
基于Python的校园美食推荐系统【2026最新】
开发语言·vue.js·后端·python·mysql·django·推荐算法