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>
相关推荐
shmily麻瓜小菜鸡2 分钟前
在 Angular 中, `if...else if...else`
前端·javascript·angular.js
bloglin9999942 分钟前
npm和nvm和nrm有什么区别
前端·npm·node.js
2501_910227541 小时前
web3 前端常见错误类型以及错误捕获处理
前端·web3
哎哟喂_!2 小时前
Node.js 同步加载问题详解:原理、危害与优化策略
前端·chrome·node.js
__BMGT()2 小时前
C++ QT图片查看器
前端·c++·qt
OK_boom2 小时前
React-useRef
javascript·react.js·ecmascript
未来之窗软件服务2 小时前
solidwors插件 开发————仙盟创梦IDE
前端·javascript·数据库·ide·仙盟创梦ide
小白学大数据2 小时前
基于Scrapy-Redis的分布式景点数据爬取与热力图生成
javascript·redis·分布式·scrapy
Varpb2 小时前
【vue】【环境配置】项目无法npm run serve,显示node版本过低
前端·vue.js·npm
读心悦3 小时前
CSS 溢出内容处理、可见性控制与盒类型设置深度解析
前端·css