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>
相关推荐
Larcher4 小时前
React Router 不只是页面跳转:从 SPA 路由到权限守卫的完整实践
javascript·后端
Larcher4 小时前
大模型为什么每次回答都不一样?一文搞懂 Temperature、Top K 与 Top P
javascript·后端
用户938515635077 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战
前端·设计模式·typescript
CodeSheep7 小时前
稚晖君公司人事大变动,来了!
前端·后端·程序员
鱼樱前端7 小时前
用 AI 做内容变收入
前端·人工智能·ai编程
eric-sjq8 小时前
10 分钟实战:用 0.6B 本地模型生成中文网页(WanlyFrontend + 编译器全流程)
javascript·机器学习·自然语言处理·html
浮生望8 小时前
React + TypeScript 组件设计进阶:从类型约束到无状态组件的三次进化
前端
To_OC8 小时前
LC 438 找到所有字母异位词:暴力超时后,我靠滑动窗口一招搞定
javascript·算法·leetcode
90后的晨仔8 小时前
Mac 开发 uni-app 终极方案:让安卓模拟器彻底脱离 Android Studio 独立运行
前端·vue.js
90后的晨仔8 小时前
别再搞混了!uni-app 中 node_modules 和 uni_modules 到底是什么关系?
前端