v-model双向绑定的实现原理

devtools/2024/12/22 9:09:45/

在前端处理表单时,我们常常需要将表单输入框的内容同步给 JavaScript 中相应的变量。手动连接值绑定和更改事件监听器可能会很麻烦,这里我们先用input属性写入输入框,代码如下:

<template><view class="out"><input type="text" :value="iptvalue" @focus="isActive = true" @blur="isActive = false"@input = "onInput"><image src="../../static/chicken.gif" class="pic":class = "isActive?'active':''"></image></view>
</template><script setup>
import {ref} from "vue" ;
const iptvalue = ref("") ;
const isActive = ref(false) ;
function onInput(e){console.log(e) ;
}
</script><style lang="scss" scoped>.out{padding: 0 20px;margin-top: 40px;position: relative;input{border: 1px solid #ccc;height: 40px;position: relative;z-index: 2;background: #fff;}.pic{width: 24px;height: 24px;z-index: 1;position: absolute;top: 0px;left: calc(50% - 12px);transition: top 0.3s;}.pic.active{  top: -24px;}} </style>

在输入框中输入内容,注意去看,我们每输入一次控制台就会获取数据,更新一次:
在这里插入图片描述
拿到这些回传的数据,我们可以让它在另一区域实时预览,代码如下:

<template><view class="out"><input type="text" :value="iptvalue" @focus="isActive = true" @blur="isActive = false"@input = "event => iptvalue = event.detail.value"><image src="../../static/chicken.gif" class="pic":class = "isActive?'active':''"></image></view><view>预览:{{iptvalue}}</view>
</template><script setup>
import {ref} from "vue" ;
const iptvalue = ref("") ;
const isActive = ref(false) ;
// function onInput(e){
// 	iptvalue.value = e.detail.value ;
// }
</script><style lang="scss" scoped>.out{padding: 0 20px;margin-top: 40px;position: relative;input{border: 1px solid #ccc;height: 40px;position: relative;z-index: 2;background: #fff;}.pic{width: 24px;height: 24px;z-index: 1;position: absolute;top: 0px;left: calc(50% - 12px);transition: top 0.3s;}.pic.active{  //pic active同时满足时top: -24px;}} </style>

效果如下:
在这里插入图片描述

v-model

接下来,通过v-model简化这段代码,用v-model替换掉value属性,就实现了我们刚刚用事件来监听的方法,代码如下:

<template><view class="out"><input type="text"  @focus="isActive = true" @blur="isActive = false"v-model="iptvalue"><image src="../../static/chicken.gif" class="pic":class = "isActive?'active':''"></image></view><view>预览:{{iptvalue}}</view>
</template><script setup>
import {ref} from "vue" ;
const iptvalue = ref("") ;
const isActive = ref(false) ;
// function onInput(e){
// 	iptvalue.value = e.detail.value ;
// }
</script><style lang="scss" scoped>.out{padding: 0 20px;margin-top: 40px;position: relative;input{border: 1px solid #ccc;height: 40px;position: relative;z-index: 2;background: #fff;}.pic{width: 24px;height: 24px;z-index: 1;position: absolute;top: 0px;left: calc(50% - 12px);transition: top 0.3s;}.pic.active{  //pic active同时满足时top: -24px;}} </style>

confirm事件

input的confirm事件会在输入完内容,敲击回车键后触发,会获取输入框的数据,加上confirm事件,代码如下:

<template><view class="out"><input type="text"  @focus="isActive = true" @blur="isActive = false"v-model="iptvalue"@confirm = "onConfirm"><image src="../../static/chicken.gif" class="pic":class = "isActive?'active':''"></image></view><view>预览:{{iptvalue}}</view>
</template><script setup>
import {ref} from "vue" ;
const iptvalue = ref("") ;
const isActive = ref(false) ;
// function onInput(e){
// 	iptvalue.value = e.detail.value ;
// }function onConfirm(e){console.log(e) ;}
</script><style lang="scss" scoped>.out{padding: 0 20px;margin-top: 40px;position: relative;input{border: 1px solid #ccc;height: 40px;position: relative;z-index: 2;background: #fff;}.pic{width: 24px;height: 24px;z-index: 1;position: absolute;top: 0px;left: calc(50% - 12px);transition: top 0.3s;}.pic.active{  //pic active同时满足时top: -24px;}} </style>

输入内容,敲击回车键后,会获取到数据:
在这里插入图片描述


http://www.ppmy.cn/devtools/58185.html

相关文章

24/07/02数据结构(1.1201)算法效率顺序表

数据结构基本内容:1.时间复杂度 空间复杂度2.顺序表链表3.栈 队列4.二叉树5.排序 数据结构是存储,组织数据的方式.指相互之间存在一种或多种特定关系的数据元素的集合 算法是定义良好的计算过程.取一个或一组值为输入并产生一个或一组值为输出. 需要知道虽然选择题有20-30个…

SketchUp Pro 2024:现代科技之诗意体验

在那遥远的唐朝&#xff0c;李白曾以诗酒为伴&#xff0c;游历山川&#xff0c;挥洒才情。而今&#xff0c;若李白穿越时空&#xff0c;手握现代科技之利器——SketchUp Pro 2024&#xff0c;定会以诗意之笔&#xff0c;描绘这款软件的神奇与魅力。 初识SketchUp Pro 2024 初…

Cookie、Session、Token、JWT 概念与区别

Cookie 定义&#xff1a;客户端存储的小块数据&#xff0c;用于记住用户信息。特点&#xff1a; 随HTTP请求发送给服务器。可设置过期时间。存储容量有限&#xff0c;约4KB。 Session 定义&#xff1a;服务器端存储的会话状态记录。特点&#xff1a; 与会话ID关联&#xff…

Linux 常用指令详解

Linux 是一个强大而灵活的操作系统&#xff0c;掌握常用的 Linux 指令是使用和管理 Linux 系统的基础。本文将介绍一些常用的 Linux 指令&#xff0c;并附上 Vim 和 g 的常用指令说明&#xff0c;帮助你更好地进行开发和操作。 1. 基本文件操作指令 1.1 显示目录内容 ls常用…

react v18 less使用(craco)

方案一、弹出配置&#xff08;不推荐&#xff09; 安装依赖&#xff1a;yarn add less less-loader 首先 执行 yarn eject 弹出配置项文件&#xff08;注意&#xff1a;弹出配置不可逆&#xff01;&#xff09; 在 config 文件夹中 找到 webpack.config.js&#xff0c;在如图…

PostgreSQL 如何优化存储过程的执行效率?

文章目录 一、查询优化1. 正确使用索引2. 避免不必要的全表扫描3. 使用合适的连接方式4. 优化子查询 二、参数传递1. 避免传递大对象2. 参数类型匹配 三、减少数据量处理1. 限制返回结果集2. 提前筛选数据 四、优化逻辑结构1. 分解复杂的存储过程2. 避免过度使用游标 五、事务处…

面试知识点【java基础篇】

1、一个程序有且仅有一个main方法启动&#xff0c;main方法是作为java程序启动的唯一入口。 public static void main(String[] args) {Student student new Student(11,"111");System.out.println(student);} 权限修饰符&#xff1a;public:修饰一个类是公开的 pub…

Knife4j的原理及应用详解(一)

本系列文章简介&#xff1a; 在当今快速发展的软件开发领域&#xff0c;API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;作为不同软件应用之间通信的桥梁&#xff0c;其重要性日益凸显。随着微服务架构的兴起&#xff0c;API的数量…