vue3的v-model在组件上几种用法

文章目录

      • 父组件
      • [1、@update和 : 拆开使用](#1、@update和 : 拆开使用)
      • [2、computed 计算属性方法](#2、computed 计算属性方法)
      • [3、defineModel (3.4+) 官方推荐](#3、defineModel (3.4+) 官方推荐)
      • 4、TS泛型用法(3.3+)

父组件

js 复制代码
<template>
  <div>
    <button @click="dialogVisible = !dialogVisible">打开/关闭</button>
	<ModalComp v-model="dialogVisible" v-if="dialogVisible" />
  </div>
</template>

<script setup>
import ModalComp from './components/ModalComp.vue'

const dialogVisible = ref(false)

</script>

1、@update和 : 拆开使用

js 复制代码
<template>
  <el-dialog
	:modelValue="modelValue"
    @update:modelValue="$emit('update:modelValue', false)"
    title="Tips"
    width="800"
    draggable
  >
	哈咯啊
  </el-dialog>
</template>

<script setup>

defineProps({
  modelValue: {
    type: Boolean,
    default: false
  }
})

</script>

2、computed 计算属性方法

js 复制代码
<template>
  <el-dialog
    v-model="dialogVisible"
    title="Tips"
    width="800"
    draggable
  >
	哈咯啊
  </el-dialog>
</template>

<script setup>

const props = defineProps({
  modelValue: {
    type: Boolean,
    default: false
  }
})
const emit = defineEmits(['update:modelValue'])

const dialogVisible = computed({
  get: () => props.modelValue,
  set: (val) => emit('update:modelValue', val)
})

</script>

3、defineModel (3.4+) 官方推荐

js 复制代码
<template>
  <el-dialog
    v-model="dialogVisible"
    title="Tips"
    width="800"
    draggable
  >
	哈咯啊
  </el-dialog>
</template>

<script setup>

const dialogVisible = defineModel({ // 第一个参数'dialogVisible', 可选
  type: Boolean,
  required: true,
  default: false,
})

</script>


// 在vite.config.ts中配置 defineModel:true
export default defineConfig({
  plugins: [
    vue({
      script:{
        defineModel: true
      }
    }),
    vueJsx(),
  ],
})

4、TS泛型用法(3.3+)

js 复制代码
<script setup>

const emit = defineEmits<{
  "update:modelValue":[value:boolean]
}>()

//用法: emit('update:modelValue', val)
// 在v-model:count(指定字段)时,好用。

</script>
相关推荐
胡萝卜术16 小时前
力扣5. 最长回文子串
前端·javascript·面试
我星期八休息17 小时前
网络编程—应用层HTTP协议
linux·运维·开发语言·前端·网络·网络协议·http
不好听61317 小时前
前端路由完全指南(下篇):懒加载、History 栈与工程化实践
前端·react.js
触底反弹19 小时前
🔥 从零搭建 RAG 知识库:爬虫→分词→向量化→检索,一步都不能错
javascript·人工智能·面试
圣光SG19 小时前
Java Web入门基础知识笔记
java·前端·笔记
cyforkk20 小时前
Vercel 绑定自定义域名极简配置指南
服务器·前端·网络
এ慕ོ冬℘゜21 小时前
JavaScript 数组核心方法实战|新增元素 + 数组转字符串 零基础详解
开发语言·javascript·ecmascript
IT_陈寒21 小时前
React useEffect依赖数组中埋的坑,这次终于让我逮到了
前端·人工智能·后端
FourAu1 天前
2026 前端突围指南:从 ESR 边缘渲染到封装 Web AI SDK,聊聊 AI 时代的职业进化
前端·人工智能