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', '我要改变')
}
相关推荐
阿隆_趣编程几秒前
为了方便相亲,我用AI写了一款小程序
前端·javascript·微信小程序
EndingCoder12 分钟前
Electron 跨平台兼容性:处理 OS 差异
前端·javascript·electron·前端框架·node.js·chrome devtools
秋田君28 分钟前
Vue3+Node.js 实现大文件上传:断点续传、秒传、分片上传完整教程(含源码)
前端
爱隐身的官人28 分钟前
ctfshow - web - nodejs
前端·nodejs·ctf
zhong liu bin28 分钟前
Vue框架技术详解——项目驱动概念理解【前端】【Vue】
前端·javascript·vue.js·vscode·vue
W-GEO28 分钟前
前端安全攻防:XSS, CSRF 等常见威胁的防范与检测指南
前端·安全·xss
2301_8035545231 分钟前
实习项目包装--HTTP 协议和 Web API
前端·网络协议·http
lssjzmn32 分钟前
Spring Web 异步响应实战:从 CompletableFuture 到 ResponseBodyEmitter 的全链路优化
java·前端·后端·springboot·异步·接口优化
这里有鱼汤33 分钟前
上班族没时间炒股?不妨试试这个隔夜超短战法(附:Python量化源码)
前端
自强的小白39 分钟前
vlan(局部虚拟网)
网络·学习