vue3的v-model指令

news2024/12/26 21:59:51

在这里插入图片描述

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

<template>

    <!-- 1. 普通input输入框双向绑定 -->
    <!-- 其实等价于:<input :modelValue="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'
</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的方式传递给了子组件定义的modelValue
            2. 子组件中使用计算属性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>
    <input
        type="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.coloradmin.cn/o/389883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Junit测试框架

一、简介 Junit框架是一个开源的Java语言单元测试框架&#xff0c;Java方向使用最广泛的单元测试框架&#xff0c;使用Java开发者都应该学习Junit并能掌握单元测试的编写。 对于Junit和Selenium的关系&#xff1a;通俗点来说Selenium如果比喻为灯泡&#xff0c;那么Junit就是电…

【蓝桥杯集训15】求最短路存在负权边——spaf算法(2 / 4)

——SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称 单源最短路&#xff0c;且图中没有负环就可以用spfa 目录 spaf求最短路模板 852. spfa判断负环 341. 最优贸易 - 3305. 作物杂交 - spaf求最短路模板 只有当一个点的前驱结点更新了&#xff0c;该节点才会得到…

操作系统——16.时间片轮转、优先级、多级反馈队列算法

这篇文章我们来看一下进程调度算法中的时间片轮转、优先级、多级反馈队列算法 目录 1.概述 2.时间片轮转调度算法&#xff08;RR&#xff0c;Round-Robin&#xff09; 3.优先级调度算法 4.多级反馈队列调度算法 5.分析对比 1.概述 首先&#xff0c;我们来看一下这篇文章…

计算机网络整理

TCP与UDP 介绍 HTTP&#xff1a;&#xff08;HyperText Transport Protocol&#xff09;是超文本传输协议的缩写&#xff0c;它用于传送WWW方式的数据&#xff0c;关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。 TCP:&#xff08;Transmission Contro…

[YOLO] yolov3、yolov4、yolov5改进

yolov3网络结构图&#xff1a; Yolov3的三个基本组件&#xff1a; &#xff08;1&#xff09;CBL&#xff1a;Yolov3网络结构中的最小组件&#xff0c;由ConvBnLeaky_relu激活函数三者组成。 &#xff08;2&#xff09;Res unit&#xff1a;借鉴Resnet网络中的残差结构&#x…

docker 入门篇

docker为什么会出现&#xff1f; 一款产品&#xff1a;开发---->运维&#xff0c;两套环境&#xff01;应用环境&#xff0c;应用配置&#xff01; 常见问题&#xff1a;我的电脑可以运行&#xff0c;版本更新&#xff0c;导致服务不可用。 环境配置十分的麻烦&#xff0c;…

RL笔记:基于策略迭代求CliffWaking-v0最优解(python实现)

目录 1. 概要 2. 实现 3. 运行结果 1. 概要 CliffWalking-v0是gym库中的一个例子[1]&#xff0c;是从Sutton-RLbook-2020的Example6.6改编而来。不过本文不是关于gym中的CliffWalking-v0如何玩的&#xff0c;而是关于基于策略迭代求该问题最优解的实现例。 CliffWalking-v0的…

Promise-异步回调

1.理解Promise promise是ES6提出的异步编程的新的解决方案&#xff0c;通过链式调用解决ajax回调地狱 从语法上看&#xff0c;promise是一个构造函数&#xff0c;自己身上有all、reject、resolve方法&#xff0c;原型上有then、catch方法 从功能上看&#xff0c;Promise对象用…

BloomFilter原理学习

文章目录BloomFilter简单介绍BloomFilter中的数学知识fpp(误判率/假阳性)的计算k的最小值公式总结编程语言实现golang的实现[已知n, p求m和k](https://github.com/bits-and-blooms/bloom/blob/master/bloom.go#L133)参考BloomFilter简单介绍 BloomFilter我们可能经常听到也在使…

瑞吉外卖——day2

目录 一、新增员工 二、查询分页数据 三、启用、禁用员工账户、编辑员工信息 一、新增员工 点击左上角新增员工 页面如下&#xff1a; 我们随便填数据 &#xff0c;点击保存&#xff0c;请求的地址如下 返回前端可以看到请求方式为Post 在employeeController中编写对应的代…

Elasticsearch:图片相似度搜索的 5 个技术组成部分

作者&#xff1a;Radovan Ondas&#xff0c;Bernhard Suhm 在本系列博文的第一部分中&#xff0c;我们介绍了图像相似度搜索&#xff0c;并回顾了一种可以降低复杂性并便于实施的高级架构。 此博客解释了实现图像相似性搜索应用程序所需的每个组件的基本概念和技术注意事项。 学…

Python采集本地二手房,一键知晓上万房源信息

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 所以今天教大家用Python来采集本地房源数据&#xff0c;帮助大家筛选好房。 话不多说&#xff0c;让我们开始愉快的旅程吧~ 更多精彩内容、资源皆可点击文章下方名片获取此处跳转 本文涉及知识点 采集基本流程 requests 发送…

【Java】Spring Boot整合WebSocket

【Java】Spring Boot整合WebSocket WebSocket简介 WebSocket是一种协议&#xff0c;用于实现客户端和服务器之间的双向通信。它可以在单个TCP连接上提供全双工通信&#xff0c;避免了HTTP协议中的请求-响应模式&#xff0c;从而实现更高效的数据交换。WebSocket协议最初由HTM…

【计算几何】贝塞尔曲线 B样条曲线简介及其离散化 + Python C++ 代码实现

文章目录一、贝塞尔曲线二、B样条曲线三、Python 代码实现B样条曲线离散化四、C 代码实现B样条曲线离散化4.1 主要代码4.2 其余类4.3 离散效果展示&#xff08;在CAD中展示&#xff09;本文只做简介&#xff0c;关于贝塞尔曲线和B样条曲线的详细介绍&#xff0c;请参考&#xf…

unity UGUI系统梳理 - 基本布局

偷懒了&#xff0c;部分节选unity API API 1、矩形工具 为了便于布局&#xff0c;每个 UI 元素都表示为矩形。可使用工具栏中的__矩形工具 (Rect Tool)__ 在 Scene 视图中操纵此矩形。矩形工具既可用于 Unity 的 2D 功能&#xff0c;也可用于 UI&#xff0c;实际上甚至还可用…

C/C++开发,无可避免的多线程(篇三).协程及其支持库

一、c20的协程概念 在c20标准后&#xff0c;在一些函数中看到co_await、co_yield、co_return这些关键词&#xff0c;这是c20为协程实现设计的运算符。 协程是能暂停执行以在之后恢复的函数。原来我们调用一个功能函数时&#xff0c;只要调用了以后&#xff0c;就要完整执行完该…

【Kettle-佛系总结】

Kettle-佛系总结Kettle-佛系总结1.kettle介绍2.kettle安装3.kettle目录介绍4.kettle核心概念1.转换2.步骤3.跳&#xff08;Hop&#xff09;4.元数据5.数据类型6.并行7.作业5.kettle转换1.输入控件1.csv文件输入2.文本文件输入3.Excel输入4.XML输入5.JSON输入6.表输入2.输出控件…

百度Apollo规划算法——轨迹拼接

百度Apollo规划算法——轨迹拼接引言轨迹拼接1、什么是轨迹拼接&#xff1f;2、为什么要进行轨迹拼接&#xff1f;3、结合Apollo代码为例理解轨迹拼接的细节。参考引言 在apollo的规划算法中&#xff0c;在每一帧规划开始时会调用一个轨迹拼接函数&#xff0c;返回一段拼接轨迹…

Kubernetes之服务发布

学了服务发现后&#xff0c;svc的IP只能被集群内部主机及pod才可以访问&#xff0c;要想集群外的主机也可以访问svc&#xff0c;就需要利用到服务发布。 NodePort Nodeport服务是外部访问服务的最基本方式。当我们创建一个服务的时候&#xff0c;把服务的端口映射到kubernete…

【大数据AI人工智能】常见的归一化函数有哪些?分别用数学公式详细介绍

常见的归一化函数有哪些?分别用数学公式详细介绍一下。 常见的归一化函数 常见的归一化函数包括: Min-Max 归一化Z-Score 归一化Log 归一化Sigmoid 归一化下面分别介绍这些归一化函数以及它们的数学公式。 1. Min-Max 归一化 Min-Max 归一化是将原始数据线性映射到 [0,1]…