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

在前端处理表单时,我们常常需要将表单输入框的内容同步给 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.mfbz.cn/a/786630.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java中 使用数组实现需求小案例(二)

Date: 2024.07.09 16:43:47 author: lijianzhan 需求实现&#xff1a; 设计一个java类&#xff0c;java方法&#xff0c;使用Random函数&#xff0c;根据实现用户输入随机数生成一个打乱的数组。 package com.lin.java.test;import java.util.Arrays; import java.util.Rando…

透明加密软件核心技术分享|十款好用的透明加密软件分享

透明加密软件的核心技术在于其能够自动、实时地对文件进行加密和解密&#xff0c;而这个过程对最终用户来说是无感的。这种技术在不改变用户操作习惯的前提下&#xff0c;增强了数据的安全性。下面是透明加密软件的一些核心技术要点。 实时加密与解密&#xff1a;软件在文件被打…

两名程序员与一名运维人员历经整整一天的时间,成功解决了 nacos 登录时出现“ERR CONNECTION RESET,用户名或密码错误”这一棘手问题

上图看页面报错 这是网页应用提示的信息&#xff0c;服务器日志没有明显的错误日志&#xff0c;检查了账号密码是正常的。 再上第二张图 把这个信息发到百度上查找 通过上图的信息大概知道网络层的原因&#xff0c;可能是在网络安全方面被重置了 下面我们就验证下 1、在服务…

《操作系统真象还原》学习笔记:第1章 部署工作环境

**提示&#xff1a;**这篇文章是根据学长提供的教程《操作系统真象还原》第一章 部署工作环境来完成的&#xff0c;我按照学长给的教程一步一步做下来&#xff0c;再结合《操作系统真象还原》这本书&#xff0c;对实验环境进行了配置。以下是我按照教程进行搭建的记录&#xff…

saas lims系统:适合中小检测机构的实验室管理系统

目前市面上的LIMS系统分为两种&#xff1a;一种是传统的LIMS系统&#xff0c;一次性买断&#xff0c;配置服务器&#xff0c;成本相对来说是比较高的。还有一种就是以白码LIMS云平台为代表的&#xff0c;基于SaaS模式的LIMS系统。白码LIMS系统提供saas模式购买&#xff0c;帮助…

Labview_压缩文件

调用顺序 源文件 生成后的文件 1.新建ZIP文件 生成ZIP文件的路径&#xff1a;为最终生成ZIP文件的路径&#xff0c;需要提供ZIP文件的名称和类型 2.添加文件到压缩文件 源文件路径&#xff1a;为需要压缩的文件路径&#xff0c;非文件夹路径 生成ZIP文件时的路径&#x…

如何挑选护眼灯?一分钟教你学会挑选护眼灯

灯光在我们的生活中扮演着不可或缺的角色&#xff0c;尤其在夜晚&#xff0c;它为我们带来必要的照明。台灯&#xff0c;作为办公人士、学生以及备考者频繁使用的照明工具&#xff0c;无论是阅读、写作还是使用电脑&#xff0c;都显得尤为重要。然而&#xff0c;长时间使用台灯…

LabVIEW中使用 DAQmx Connect Terminals作用意义

该图展示了如何在LabVIEW中使用 DAQmx Connect Terminals.vi 将一个信号从一个源端口连接到一个目标端口。这种处理有以下几个主要目的和作用&#xff1a; 同步操作&#xff1a; 在多任务、多通道或多设备系统中&#xff0c;可能需要不同的组件在同一时刻执行某些操作。通过将触…

Golang期末作业之电子商城(源码)

作品介绍 1.网页作品简介方面 &#xff1a;主要有&#xff1a;首页 商品详情 购物车 订单 评价 支付 总共 5个页面 2.作品使用的技术:这个作品基于Golang语言&#xff0c;并且结合一些前端的知识&#xff0c;例如:HTML、CSS、JS、AJAX等等知识点&#xff0c;同时连接数据库的&…

【C++项目】从零实现一个在线编译器

前言 身为一名程序员&#xff0c;想必大家都有接触过像leetcode这样的刷题网站&#xff0c;不知你们在刷题的过程中是否思考过一个问题&#xff1a;它们是如何实现在线编译运行的功能。如果你对此感到好奇&#xff0c;那么本文将一步步带你来实现一个简易在线编译器。 项目概…

【kafka】可视化工具cmak(原kafka-manager)安装问题解决

众所周知&#xff08;反正不管你知不知道&#xff09;&#xff0c;kafka-maneger更名了&#xff0c;现在叫cmak&#xff01;原因是什么呢&#xff1f;据不可靠小道信息说&#xff0c;原kafka-manager这个名字涉及到kafka商标使用问题&#xff0c;应该是被律师函警告了&#xff…

游戏AI的创造思路-技术基础-蒙特卡洛树搜索(1)

本篇介绍蒙特卡洛树搜索算法&#xff0c;AlphaGo用于围棋计算的应用就是基于蒙特卡洛树搜索研发的~~~ 目录 1. 定义 2. 发展历史 3. 公式和函数 3.1.算法的公式和函数 3.2. Python实现公式和函数 4. 运行原理 4.1. 运行原理 4.2. 各步骤用Python代码 5. 优缺点和缺陷的…

C语言-预处理详解

文章目录 &#x1f3af;引言&#x1f453;预处理详解1.预定义符号1.1 __FILE__1.2 __LINE__1.3 __DATE__1.4 __TIME__1.5 __STDC__ 2.#define定义常量2.1 定义数值常量2.2 定义字符串常量 3.#define中使用参数3.1**使用示例**3.2注意事项 4.宏替换的规则5.宏函数和函数的对比5.…

使用Redis实现消息队列:List、Pub/Sub和Stream的实践

摘要 Redis是一个高性能的键值存储系统&#xff0c;它的多种数据结构使其成为实现消息队列的理想选择。本文将探讨如何使用Redis的List、Pub/Sub和Stream数据结构来实现一个高效的消息队列系统。 1. 消息队列的基本概念 消息队列是一种应用程序之间进行通信的机制&#xff0…

解锁算力新极限,Xilinx UltraScale+赋能的高性能低延时FPGA加速卡

01、产品概述 AiHPC-V9P 是一款基于 AMD Virtex UltraScale FPGA VU9P 的 PCIe Gen3.0 x16 接口智能网卡&#xff0c;具有最大2*200GbE /或者16*10GbE(典型应用&#xff09;接入容量的高性能低延时智能网卡。 对外接口支持两组QSFP-DD 最高25Gb/s x8Lane 光口接入&#xf…

Java基础-组件及事件处理(中)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 BorderLayout布局管理器 说明&#xff1a; 示例&#xff1a; FlowLayout布局管理器 说明&#xff1a; …

我跟ai学web知识点:“短链接”

我跟ai学web知识点&#xff0c;短链接不是“免费午餐”。 (笔记模板由python脚本于2024年07月08日 12:44:47创建&#xff0c;本篇笔记适合喜欢Web知识的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经…

Windows下编译OpenSSL静态库

目录 1. 版本与下载地址 2. 下载与安装VS2015 3. 下载与安装Perl 4. 测试ActivePerl是否安装正确 5. 下载OpenSSL 6. 编译32位OpenSSL静态库 6.1 解压openssl-1.0.2l.tar.gz 6.2 打开VS2015 x86本机工具命令提示符 6.3 输入命令进入到openssl的目录中 6.4 执行配置命…

一文洞悉巴基斯坦电子游戏出海引流获客广告风口不容忽视

一文洞悉巴基斯坦电子游戏出海引流获客广告风口不容忽视 随着全球数字经济的蓬勃发展&#xff0c;电子游戏行业也迎来了前所未有的机遇。巴基斯坦&#xff0c;这个拥有庞大人口基数和日益增长的消费能力的国家&#xff0c;其电子游戏市场潜力巨大。本文旨在探讨巴基斯坦电子游戏…

tomcat安装

tomcat tomcat和php一样&#xff0c;都是用来处理动态页面的。 tomcat也可以作为web应用服务器&#xff0c;开源的。 php .php tomcat .jsp nginx .html tomcat是用java代码写的程序&#xff0c;运行的是java的web应用程序 tomcat的特点和功能&#xff1a; 1、servlet容…