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>
相关推荐
张张努力变强1 分钟前
C++类和对象(一):inline函数、nullptr、类的定义深度解析
开发语言·前端·jvm·数据结构·c++·算法
Elcker31 分钟前
JAVA-Web 项目研发中如何保持团队研发风格的统一
java·前端·javascript
selectDele1 小时前
Solid.js和React的比较
前端·javascript·react.js·solid.js
摘星编程1 小时前
React Native for OpenHarmony 实战:I18n 国际化详解
javascript·react native·react.js
小旋风012341 小时前
前端对接豆包AI(vue2版本)
前端·人工智能
—Qeyser1 小时前
Flutter AppBar 导航栏组件完全指南
前端·javascript·flutter
摘星编程1 小时前
React Native for OpenHarmony 实战:Localization 本地化详解
javascript·react native·react.js
Amumu121382 小时前
React扩展(一)
前端·javascript·react.js
cypking2 小时前
三、前端规范化 项目代码规范
前端·代码规范
xkxnq2 小时前
第二阶段:Vue 组件化开发(第 28天)
前端·javascript·vue.js