当前位置: 首页 > article >正文

vue3的组件v-model(defineModel()宏)

这里展示的是vue3.4版本之前的如何在组件上使用以实现双向绑定 

<template>
    <p>我是子组件</p>
    <input :value="props.modelValue" @input="handelInput"/>
</template>

<script lang="ts" setup>
    const props = defineProps({
     modelValue: {
            default: '',
            type: String,
        }
    })

    const emits = defineEmits(['update:modelValue']);
    cosnt handelInput = (e)=>{
     emits('update:modelValue', e.target.value);
}
</script>
<template>
<p>我是父组件</p>
<Child v-model="msg">

</template>


<script lang="ts" setup>
    const msg = ref('v-model调试')
</script>

 v-model 的参数

在 v-model中学到的指定参数,我们可以在单个组件实例上创建多个 v-model 双向绑定。

<template>
    <p>我是子组件</p>
    <input :value="props.msg" @input="handelInput"/>
    <input :value="props.msg2" @input="handelInput2"/
</template>

<script lang="ts" setup>
    const props = defineProps({
     msg: {
            default: '',
            type: String,
        },
     msg2: {
            default: '',
            type: String,
        },
    })

    const emits = defineEmits(['update:msg','update:msg2']);
    cosnt handelInput = (e)=>{
     emits('update:msg', e.target.value);
    }
cosnt handelInput2 = (e)=>{
     emits('update:msg2', e.target.value);
    }
</script>
<template>
<p>我是父组件</p>
<Child v-model:msg="msg" v-model:msg2="text">

</template>


<script lang="ts" setup>
    const msg = ref('v-model调试')
    const text = ref('v-model多个参数调试')
</script>

从 Vue 3.4 开始,推荐的实现方式是使用 defineModel() 宏:

<!-- Child.vue -->
<template>
    <p>我是子组件</p>
  <div>展示父组件传来的双向绑定值: {
  
  { model }}</div>
  <button @click="update">Increment</button>
</template>


<script setup>
const model = defineModel()

const update =()=>{
  model.value++
}
</script>

<!-- Parent.vue -->
<template>
    <p>我是父组件</p>
    <Child v-model="countModel" />
</template>
<script lang="ts" setup>
    const countModel = ref(0)
</script>

defineModel() 返回的值是一个 ref(所以使用的时候要.value)。它可以像其他 ref 一样被访问以及修改,不过它能起到在父组件和当前变量之间的双向绑定的作用

上面还讲到带参的v-model,那么defineModel如何带参呢:

<!-- MyComponent.vue -->
<template>
   <p>我是子组件</p>
  <input type="text" v-model="title" />
  <input type="text" v-model="content" />
</template>


<script setup>
const title = defineModel('title')
const content = defineModel('content')
</script>

<template>
<p>我是父组件</p>
<MyComponent v-model:title="bookTitle"  v-model:content="bookContent"/>
</template>
<script lang="ts" setup>
    const  bookTitle = ref('bookTitle')
    const  bookContent = ref('bookContent')
</script>

参考文档:组件 v-model | Vue.js


http://www.kler.cn/a/516852.html

相关文章:

  • 双目立体校正和Q矩阵
  • 【高项】5.5 确认范围 ITTO 、 5.6 控制范围 ITTO
  • SQL注入漏洞之基础数据类型注入 字符 数字 搜索 XX 以及靶场实例哟
  • 【2024年 CSDN博客之星】我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾
  • 2025.1.20——一、[RCTF2015]EasySQL1 二次注入|报错注入|代码审计
  • QT:控件属性及常用控件(3)-----输入类控件(正则表达式)
  • 第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
  • 深度学习|表示学习|卷积神经网络|通道 channel 是什么?|05
  • 怎样使用树莓派自己搭建一套ADS-B信号接收系统
  • 栈和队列刷题篇
  • 新能源汽车充电桩选型以及安装应用
  • 2025.1.20——四、[强网杯 2019]Upload1 文件上传|反序列化
  • STM32——KEY按键
  • ETLCloud在iPaas中的是关键角色?
  • 若依 v-hasPermi 自定义指令失效场景
  • Java核心技术解析:泛型与类型安全全面指南
  • android wifi AsyncChannel(WifiManager和WifiP2pManager)
  • 【CS61A 2024秋】Python入门课,全过程记录P3(Week5 Sequences开始,更新于2025/1/23)
  • 韩国机场WebGIS可视化集合Google遥感影像分析
  • Java EE 进阶:Spring MVC(1)
  • HarmonyOS快速入门
  • 【YOLOv10改进[Backbone]】使用LSKNet替换Backbone | 用于遥感目标检测的大型选择性核网络
  • 在centos上编译安装opensips【初级-默认安装】
  • Nginx 性能优化技巧与实践(一)
  • PLC通信
  • 2025年最新汽车零部件企业销售项目管理解决方案