vue3 自定义 v-model(无参数和带参数)【setup版】(两种方案)

vue2 自定义 v-model 详见 https://sunshinehu.blog.csdn.net/article/details/136942322

vue3 自定义 v-model【方案一】

子组件 Child.vue

html 复制代码
<script setup>
defineProps(["modelValue"]);
const emits = defineEmits();
</script>

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

父组件

html 复制代码
<script setup>
import { ref } from "vue";
import Child from "./Child.vue";

const msg = ref("");
</script>

<template>
  <div>
    {{ msg }}
    <Child v-model="msg" />
  </div>
</template>

技术要点

vue3 中,若 v-model 未配置参数,则

  • 父组件给子组件传入了名为 modelValue 的 prop
  • 父组件监听了子组件的自定义事件 update:modelValue

v-model 带参数

vue3 支持多个v-model,且可带参数

父组件

html 复制代码
<script setup>
import { ref } from "vue";
import Child from "./Child.vue";

const title = ref("");
const msg = ref("");
</script>

<template>
  <div>
    <p>{{ title }}</p>
    <p>{{ msg }}</p>
    <Child v-model:title="title" v-model:msg="msg" />
  </div>
</template>

子组件

html 复制代码
<script setup>
defineProps(["title", "msg"]);
const emits = defineEmits(["update:title", "update:msg"]);
</script>

<template>
  <input
    type="text"
    :value="title"
    @input="emits('update:title', $event.target.value)"
  />

  <input
    type="text"
    :value="msg"
    @input="emits('update:msg', $event.target.value)"
  />
</template>

vue3 自定义 v-model【方案二】推荐

html 复制代码
<!-- 组合式 API vue3.4+ -->
<script setup>
const model = defineModel()
</script>

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

defineModel() 返回的值是一个 ref

  • 它的 .value 和父组件的 v-model 的值同步
  • 当它被子组件变更时,会触发父组件绑定的值一起更新

v-model 带参数

以参数 "title" 为例

html 复制代码
<!-- 组合式 API vue3.4+ -->
<script setup>
const title = defineModel('title')
</script>

<template>
  <input type="text" v-model="title" />
</template>

父组件

html 复制代码
<MyComponent v-model:title="bookTitle" />
相关推荐
刘卓航众创芯云服务部36 分钟前
Kimi K3复杂任务实测:我把团队最头疼的三个场景全跑了一遍
前端
cll_8692418911 小时前
一个好看的Wordpress博客文字css样式
前端·css·ui
武子康1 小时前
Shippy:确定性工具、会话级 Sandbox 与 Live-Data Eval(4 类收敛 + 7 步实现方案 + 6 类评测指标)
前端·人工智能·后端
糖果店的幽灵1 小时前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph
meilindehuzi_a1 小时前
Workflow 与 Agent 有什么区别:从 LangChain 流水线到智能体决策
前端·人工智能
三翼鸟数字化技术团队1 小时前
一种前端大屏适配方案
前端·css
Bad_Shepherd1 小时前
vue-element-plus-admin添加自定义svg图标,并且图标选择组件可选自定义图标
vue.js·elementui·前端框架
小四的小六2 小时前
WebView 在 AI 时代的三个被低估的价值——从自己的 AI 产品里找到的答案
前端·openai·ai编程
程序员黑豆2 小时前
鸿蒙应用开发:ForEach 循环渲染用法详解
前端·harmonyos
JarvanMo2 小时前
HTTP 迎来 16 年来首个全新请求方法:`QUERY`
前端