vue3的v-model指令

news/2024/11/25 18:10:54/

在这里插入图片描述

1. 普通input输入框双向绑定

<template><!-- 1. 普通input输入框双向绑定 --><!-- 其实等价于:<input :value="title" @update:modelValue="newTitle=>title=newTitle"/> --><input type="text" v-model="title" /><span>{{ title }}</span></template><script lang="ts" setup>import { ref,reactive } from 'vue'const title = ref("11")</script><style lang="scss"></style>

2. 自定义组件双向绑定

Test.vue

<template><!-- 2. 自定义组件双向绑定 -->父组件中: {{ weather }}<br/>子组件中: <CustomInput v-model="weather"/><!-- 等价于下面 --><!-- 1. 将值 绑定到 modelValue prop --><!-- 2. 当 update:modelValue事件 触发时,通过子组件传入的参数,更新父组件中的值 --><!-- <CustomInput :modelValue="weather" @update:modelValue="newWeather=>weather=newWeather"/> --></template><script lang="ts" setup>import { ref,reactive } from 'vue'import CustomInput from '@/views/test/CustomInput.vue'const weather = ref('rainy')
</script><style lang="scss"></style>

CustomInput

<template>{{ modelValue }}<button :class="{sunny:modelValue === 'sunny'}" @click="$emit('update:modelValue','sunny')">晴天-sunny</button><button :class="{sunny:modelValue === 'rainy'}" @click="$emit('update:modelValue','rainy')">雨天-sunny</button>
</template><script lang="ts" setup>const props = defineProps(['modelValue'])const emits = defineEmits(['update:modelValue'])</script><style lang="scss">.sunny {background: yellow;}.rainy {background: darkgray;}
</style>

3. 使用computed属性实现v-model双向绑定

Test.vue

<template><!-- 3. 使用computed属性实现v-model双向绑定 -->父组件中: {{ value1 }}<br/>子组件中: <custom-input2 v-model="value1"/></template><script lang="ts" setup>import { ref,reactive } from 'vue'import CustomInput2 from '@/views/test/CustomInput2.vue'const value1 = ref("zzhua")</script><style lang="scss"></style>

CustomInput2.vue

<template><!-- <input v-model="value" /> --> <!-- 以上等价于下方 --><input :value="value" @input="value = $event.target.value"/> {{ modelValue }} - {{ value }}<!-- 过程分析: 1. 父组件通过v-model指令, 将值通过props的方式传递给了子组件定义的modelValue2. 子组件中使用计算属性value, 读此属性返回modelValue, 修改此属性将触发 update:modelValue事件3. 当子组件初始化时, 模板被渲染, 拿到父组件传过来的modelValue, 模板中用到计算属性value的地方,计算属性value的get将被触发,于是返回modeValue的值4. 当修改子组件input框中的内容时, 将会把修改后的内容赋值给计算属性value, 计算属性value的set将会触发,将会把修改后的内容交给父组件的update:modelValue事件处理函数,从而子组件又开始更新渲染模板,于是跟第三步是一样的-->
</template><script lang="ts" setup>
import { computed } from 'vue'const props = defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])const value = computed({get() {return props.modelValue},set(value) {emit('update:modelValue', value)}
})
</script>

4. 自定义v-model对应的prop参数名

Test.vue

<template><!-- 4. v-model:attr 自定义v-model对应的prop参数名 --><!-- 默认情况下,v-model 在组件上都是使用 modelValue 作为 prop,并以 update:modelValue 作为对应的事件。我们可以通过给 v-model 指定一个参数来更改这些名字 (除此之外: 可以通过v-model:attr绑定多个v-model)--><CustomInput3 v-model:title="bookTitle" /></template><script lang="ts" setup>import { ref,reactive } from 'vue'import CustomInput3 from '@/views/test/CustomInput3.vue';const bookTitle = ref("bookTitle")</script><style lang="scss"></style>

CustomInput3

<template><input type="text" :value="title" @input="$emit('update:title', $event.target.value)" />{{ title }}
</template><script setup>defineProps(['title'])defineEmits(['update:title'])
</script>

5. v-model支持修饰符

Test.vue

<template><!-- 5. v-model的修饰符 --><MyComponent v-model.capitalize="myText" /></template><script lang="ts" setup>import { ref,reactive } from 'vue'import MyComponent from '@/views/test/MyComponent.vue';const myText = ref("myText")</script><style lang="scss"></style>

MyComponent.vue

<template><inputtype="text":value="modelValue"@input="handleInput"/>{{ modelValue }}
</template><script lang="ts" setup>const props = defineProps({modelValue: String,modelModifiers: { default: () => ({}) } /* 这个prop可以拿到修饰符 */})console.log(props.modelModifiers) // { capitalize: true }const emit = defineEmits(['update:modelValue'])// 处理input事件function handleInput(e) {let value = e.target.value// 根据是否存在修饰符, 作进一步处理if(props.modelModifiers.capitalize) {value = value.charAt(0).toUpperCase() + value.slice(1)}emit('update:modelValue', value)}</script><style lang="scss"></style>

http://www.ppmy.cn/news/30846.html

相关文章

Java中对象的finalization机制

本篇文章我们详细介绍Java中对象的finalization机制&#xff0c;以及怎么使用finalize()方法&#xff0c;将即将被回收的对象&#xff0c;拉回来。1、finalization机制Java语言提供了对象终止&#xff08;finalization&#xff09;机制来允许开发人员提供对象被销毁之前的自定义…

LSTM网络:一种强大的时序数据建模工具

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

【预告】ORACLE Unifier v22.12 虚拟机发布

引言 离ORACLE Primavera Unifier 最新系统 v22.12已过去了3个多月&#xff0c;应盆友需要&#xff0c;也为方便大家体验&#xff0c;我近日将构建最新的Unifier的虚拟环境&#xff0c;届时将分享给大家&#xff0c;最终可通过VMWare vsphere (esxi) / workstation 或Oracle …

文件预览kkFileView安装及使用

1 前言网页端一般会遇到各种文件&#xff0c;比如&#xff1a;txt、doc、docx、pdf、xml、xls、xlsx、ppt、pptx、zip、png、jpg等等。有时候我们不想要把文件下载下来&#xff0c;而是想在线打开文件预览 &#xff0c;这个时候如果每一种格式都需要我们去写代码造轮子去实现预…

类和对象及其构造方法

类和对象 现实世界的事物由什么组成&#xff1f; 属性 行为 类也可以包含属性和行为&#xff0c;所以使用类描述现实世界事物是非常合适的类和对象的关系是什么&#xff1f; 类是程序中的“设计图纸” 对象是基于图纸生产的具体实体什么是面向对象编程&#xff1f; 面向对象编…

【C语言】详解静态变量static

关键字static 在C语言中&#xff1a;static是用来修饰变量和函数的static主要作用为:1. 修饰局部变量-静态局部变量 2. 修饰全局变量-静态全局变量3. 修饰函数-静态函数在讲解静态变量之前&#xff0c;我们应该了解静态变量和其他变量的区别: 修饰局部变量 //代码1 #include &l…

【打卡-Coggle竞赛学习2023年3月】对话意图识别

学习链接&#xff1a; https://coggle.club/blog/30days-of-ml-202303 ## Part1 内容介绍 本月竞赛学习将以对话意图识别展开&#xff0c;意图识别是指分析用户的核心需求&#xff0c;错误的识别几乎可以确定找不到能满足用户需求的内容&#xff0c;导致产生非常差的用户体验…

大数据面试集锦

一、Linux 1&#xff09;常用的高级命令top iotop ps -ef df -h natstat jmap -heap tar rpm 2&#xff09;查看进程 查看端口号 查看磁盘使用情况 查看某个进程内存ps -ef natstat df -h jmap -heap二、shell 1、用过哪些工具awk sed …