vue3学习(十一)--- v-model

文章目录

v-model 其实是一个语法糖 通过propsemit组合而成的

v-model的更新

vue2和vue3中的v-model是有一些差别的:

  1. prop:value 变为 modelValue
  2. 事件:input 变为 update:modelValue
  3. v-bind 的 .sync 修饰符和组件的 model 选项已移除
  4. 新增 支持多个v-model
  5. 新增 支持自定义修饰符 Modifiers
javascript 复制代码
父组件
<template>
  <button @click="show = !show">开关{{show}}</button>
  <Dialog v-model="show"></Dialog>
</template>
 
<script setup lang='ts'>
import Dialog from "./components/Dialog/index.vue";
import {ref} from 'vue'
const show = ref(false)
</script>
 
<style>
</style>
javascript 复制代码
子组件
<template>
     <div v-if='propData.modelValue ' class="dialog">
         <div class="dialog-header">
             <div>标题</div><div @click="close">x</div>
         </div>
         <div class="dialog-content">
            内容
         </div>
         
     </div>
</template>
 
<script setup lang='ts'>
 
type Props = {
	默认就叫modelValue
   modelValue:boolean
}
 
const propData = defineProps<Props>()

emit的默认事件名称写法
const emit = defineEmits(['update:modelValue'])
 
const close = () => {
     emit('update:modelValue',false)
}
 
</script>

多个 v-model 绑定

javascript 复制代码
父组件
<template>
  <button @click="show = !show">开关{{show}} ----- {{title}}</button>
  <Dialog v-model:title='title' v-model="show"></Dialog>
</template>
 
<script setup lang='ts'>
import Dialog from "./components/Dialog/index.vue";
import {ref} from 'vue'
const show = ref(false)
const title = ref('我是标题')
</script>
 
<style>
</style>
javascript 复制代码
子组件
<template>
     <div v-if='modelValue ' class="dialog">
         <div class="dialog-header">
             <div>标题---{{title}}</div><div @click="close">x</div>
         </div>
         <div class="dialog-content">
            内容
         </div>
         
     </div>
</template>
 
<script setup lang='ts'>
 
type Props = {
   modelValue:boolean,
   title:string
}
 
const propData = defineProps<Props>()
 
const emit = defineEmits(['update:modelValue','update:title'])
 
const close = () => {
     emit('update:modelValue',false)
     emit('update:title','我要改变')
}
 
</script>

自定义修饰符

添加到组件 v-model 的修饰符将通过 modelModifiers prop 提供给组件。在下面的示例中,我们创建了一个组件,其中包含默认为空对象的 modelModifiers prop

javascript 复制代码
父组件
<template>
  <button @click="show = !show">开关{{show}} ----- {{title}}</button>
  这里添加修饰符
  <Dialog v-model:title.flag='title' v-model="show"></Dialog>
</template>
 
<script setup lang='ts'>
import Dialog from "./components/Dialog/index.vue";
import {ref} from 'vue'
const show = ref(false)
const title = ref('我是标题')
</script>
 
<style>
</style>
javascript 复制代码
<script setup lang='ts'>
 
type Props = {
    modelValue: boolean,
    title?: string,
    默认写法
    modelModifiers?: {
        default: () => {}
    }
    用的是修饰符前面的参数 + 'Modifiers'的固定写法
    titleModifiers?: {
        default: () => {}
    }
 
}
 
const propData = defineProps<Props>()

 console.log(propData.modelModifiers) ===> //{}
 console.log(propData.titleModifiers) ===> //flag:true

const emit = defineEmits(['update:modelValue', 'update:title'])
 
const close = () => {
    console.log(propData.modelModifiers);
 
    emit('update:modelValue', false)
    emit('update:title', '我要改变')
}
相关推荐
Harm灬小海2 分钟前
【云计算学习之路】学习Centos7系统-权限管理
linux·运维·服务器·学习·云计算
lchcy6 分钟前
移动端h5好多兼容性问题啊
前端
吃好睡好便好11 分钟前
在Matlab中绘制质点运动轨迹图
开发语言·学习·算法·matlab·信息可视化
KaMeidebaby11 分钟前
卡梅德生物技术快报|多肽库筛选:基于全质粒 PCR 的噬菌体文库构建与小分子表位淘选实战
前端·数据库·其他·百度·新浪微博
m0_5027249514 分钟前
vue3生成pdf
前端·javascript·vue.js·pdf
楼田莉子16 分钟前
C#学习之C#入门学习
开发语言·后端·学习·c#
@不误正业16 分钟前
2026-05-16-多Agent协作框架深度实战-从ReAct到Plan-and-Execute全架构演进
前端·react.js·架构
我命由我1234516 分钟前
PHP - PHP 简易 Web 服务器、基础接口开发
服务器·开发语言·前端·php·intellij-idea·idea·intellij idea
hef28817 分钟前
用REGEXP函数简化城市销售数据统计的实践与学习路径
学习
咖喱o18 分钟前
IPv6
服务器·前端·网络