vue3 自定义组件 v-model 原理解析

1. input 中的 v-model

html 复制代码
<!-- my-input.vue -->
<!-- props:value值必须用modelValue命名 -->
<!-- emits:方法必须用update:modelValue命名 -->
<script setup>
  const props = defineProps({
    modelValue: String,
  });

  let emits = defineEmits(["update:modelValue"]);
  const updateValue = (event) => {
    emits("update:modelValue", event.target.value);
  };
</script>

<template>
  <div>
    <input :value="props.modelValue" @input="updateValue" />
    <span>子组件:{{ props.modelValue }}</span>
  </div>
</template>
html 复制代码
<my-input v-model="value"></my-input>

2. naive-ui 组件二次封装 v-model

html 复制代码
<!-- my-input.vue -->
<!-- props:value值必须用modelValue命名 -->
<!-- emits:方法必须用update:modelValue命名 -->
<script setup>
import { NInput } from "naive-ui";
const props = defineProps({
  modelValue: String,
});

let emits = defineEmits(["update:modelValue"]);

// 差别在这,直接value就是改变的值
const updateValue = (value) => {
  emits("update:modelValue", value);
};
</script>

<template>
  <div>
    <n-input :value="props.modelValue" @input="updateValue"></n-input>
    <span>子组件:{{ props.modelValue }}</span>
  </div>
</template>
html 复制代码
<my-input v-model="value"></my-input>
相关推荐
dweizhao2 分钟前
突发!Claude Code源码泄露了
前端
sunny_34 分钟前
💥 Claude Code 源码泄露?我把这个最强 AI Coding Agent 的架构扒干净了
前端·agent·claude
西洼工作室38 分钟前
React轮播图优化:通过延迟 + 动画的组合,彻底消除视觉上的闪烁感
前端·react.js·前端框架
yaaakaaang1 小时前
(八)前端,如此简单!---五组结构
前端·javascript
我是若尘1 小时前
我的需求代码被主干 revert 了,接下来我该怎么操作?
前端·后端·代码规范
魁首1 小时前
Claude Code 源码泄露的背后,到底与Codex,Gemini 有啥不一样?
前端·openai·claude
攀登的牵牛花1 小时前
程序员失业论,被 SWE-CI 一组数据打醒:真正先被替代的是低质量交付
前端·github
EstherNi2 小时前
vue3仿照elementui样式的写法,并进行校验,并且有默认值的设置
javascript·elementui
BumBle2 小时前
Vue项目中实现路由守卫自动取消Pending请求
前端
gCode Teacher 格码致知2 小时前
Javascript提高:get和post等请求,对于汉字和空格信息进行编码的原则-由Deepseek产生
开发语言·前端·javascript·node.js·jquery