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>
相关推荐
哈__10 小时前
ReactNative项目OpenHarmony三方库集成实战:react-native-device-info
javascript·react native·react.js
前端布鲁伊10 小时前
零代码上线一个图片处理网站,我是如何使唤AI干活的?
前端·ai编程
庄小焱10 小时前
React——React基础语法(2)
前端·javascript·react.js
终端鹿10 小时前
Vue3 核心 API 深度解析:ref / reactive / computed / watch
前端·javascript·vue.js
console.log('npc')10 小时前
partial在react接口定义中是什么意思
前端·javascript·typescript
SuperEugene10 小时前
前端 utils 工具函数规范:拆分 / 命名 / 复用全指南,避开全局污染等高频坑|编码语法规范篇
开发语言·前端·javascript
C澒10 小时前
微前端容器标准化 —— 公共能力篇:通用请求
前端·架构
llxxyy卢10 小时前
web部分中等题目
android·前端
若惜11 小时前
selenium自动化测试web自动化测试 框架封装Pom
前端·python·selenium
Amumu1213811 小时前
Js:内置对象
开发语言·前端·javascript