【Vue3 知识第四讲】数据双向绑定、事件绑定、事件修饰符详解

文章目录

    • 一、数据双向绑定
    • 二、事件绑定详解
      • 2.1 **Vue中的事件绑定指令**
      • 2.2 **事件函数的调用方式**
      • 2.3 **事件函数参数传递**
    • 三、事件修饰符
      • 3.1 **Vue中常用的事件修饰符**
      • 3.2 **按键修饰符**
    • 四、属性绑定
    • 五、类与样式的绑定
      • 5.1 class 类的绑定
      • 5.2 style 样式绑定

一、数据双向绑定

什么是数据双向绑定?

  • 当数据发生变化的时候,视图会相应的发生变化
  • 当视图发生改变的时候,数据也会相应的同步变化

数字化管理平台
Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus
权限系统-商城
个人博客地址

双向绑定的指令

​ v-model 指令实现数据双向绑定

双向绑定使用场景

​ 利用 v-model 指令,限制在 input select textarea components (组件) 中使用

示例:
在这里插入图片描述
修饰符

  • .lazy 默认情况下,v-model 会在每次 input 事件后更新数据 (IME 拼字阶段的状态例外)。你可以添加 lazy 修饰符来改为在每次 change 事件后更新数据
  • .number 如果你想让用户输入自动转换为数字,你可以在 v-model 后添加 .number 修饰符来管理输入
  • .trim 如果你想要默认自动去除用户输入内容中两端的空格,你可以在 v-model 后添加 .trim 修饰符
<div><input type="text" v-model.lazy="data"></div>
<div><input type="text" v-model.number.trim="numData" @change="checkType"></div>

二、事件绑定详解

2.1 Vue中的事件绑定指令

  • v-on 指令用法

    <button v-on:click="fn">v-on</button>
    
  • 指令可以简写为 @ (语法糖)

    <button @click="fn2">@语法糖</button>
    

2.2 事件函数的调用方式

  • 直接绑定函数名

    <button v-on:click="fn">v-on</button>
    
  • 调用函数

    <button v-on:click="fn()">v-on</button>
    

2.3 事件函数参数传递

  • 普通参数:多个参数使用逗号隔开

    <button v-on:click="fn(10,20,30)">v-on</button>
    
  • 事件对象:

    tip1:如果事件直接绑定函数名称 或者 调用函数并未传递任何参数,那么事件函数会默认传递事件对象作为第一个参数;

    tip2:如果事件绑定函数调用时传递了参数,那么事件对象必须作为最后一个参数显式传递,并且事件对象的名称必须是 $event

    tip3:在不考虑兼容性问题,且允许 window 全局对象存在的情况下,可以在函数内直接通过全局对象获取事件对象 window.event 也可,建议使用传参的方式。

  • 小案例:购物车简易计数器
    在这里插入图片描述
    实现思路:

  1. data 中定义初始的数量 num
  2. 将 num 使用 “插值表达式” 或 “v-text指令” 设置给对应的标签
  3. 使用 v-on 指令给加减按钮定义点击事件 add 和 reduce
  4. 在 methods 中定义 add 和 reduce 方法的逻辑:数量最少为 1,最大为 20

三、事件修饰符

3.1 Vue中常用的事件修饰符

  • .stop 阻止冒泡

  • .prevent 取消默认事件

  • .self 仅当 event.target 是元素本身时才会触发事件处理器

  • .capture 添加事件监听器时,使用 capture 捕获模式

  • .once 事件最多被触发一次

  • .passive 修饰符一般用于触摸事件的监听器,可以用来改善移动端设备的滚屏性能。不能和 .prevent 一起使用。

    // 通过 .stop 修饰符阻止事件冒泡行为
    <div class="out" @click="fn2">外部容器<div class="in" @click.stop="fn">内部容器</div>
    </div>//通过 .prevent 修饰符阻止 a 标签默认跳转功能
    <a href="http://www.baidu.com" @click.prevent="cancel">跳转百度</a>//链式修改
    <a @click.stop.prevent="doThat"></a>
    

3.2 按键修饰符

  • .enter => enter键

  • .tab => tab键

  • .delete (捕获“删除”和“退格”按键) => 删除键

  • .esc => 取消键

  • .space => 空格键

  • .up => 上

  • .down => 下

  • .left => 左

  • .right => 右

    // .enter 回车键
    <div class="login"><p><label>用户名:<input type="text" v-model="username" placeholder="请输入用户名"></label></p><!-- 按键修饰符 .enter 触发回车键 --><p><label>密码:<input type="password" v-model="password" placeholder="请输入密码" @keyup.enter="login"></label></p><button @click="login">登录</button></div>// .delete 删除建
    <input @keyup.delete='submit'/>
    

四、属性绑定

v-bind 指令被用来响应地更新 HTML 属性

语法 v-bind:prop = val

语法糖 :prop = val

//属性绑定
<h2 v-bind:title="title">属性绑定演示</h2>
<p :class="ft20">语法糖</p>
<div v-bind="{id:‘container’,class:'wrapper'}"></div>

注:语法糖是对某个操作的简化,来提高开发效率

五、类与样式的绑定

5.1 class 类的绑定

  • 绑定对象语法

    v-bind:class = { 类名:类值,类名1:类值1,…,类名n:类值n }

    如果类名对应的值为true,则显示这个类名;否则不显示这个类名

  • 绑定数组语法

    v-bind:class = [ 值1,值2,…,值n ]

    值1、值2对应data中的数据

    <script setup>
    import { ref, reactive, computed } from 'vue'const clsName = "active-link"
    // 通过 ref 声明的数据,在 script 中,需要通过 .value 获取和修改值;在 template 模板中使用时,则不需要通过 .value 获取值,模板会自动解析数据
    const count = ref(0)// 注意:这里如果想要在count值修改后,实时响应数据变化,需要采用计算属性
    const clsObj = computed(() => ({link: true,activeLink: count.value % 2 == 0
    }))let fm = ref(true)
    </script>
    <template><div><!-- 基于 v-bind 指令,增强绑定 class类 与 style样式,这两个属性值除了可以使用字符串外,还可以使用对象和数组的绑定 --><a href="javascript:;" :class="clsName" class="link" style="text-decoration:none;":style="'font-style:italic;'">超链接标签演示字符串类型的class和style绑定</a><hr><a href="javascript:;" :class="clsObj":style="{ 'text-decoration': 'none', fontStyle: count % 2 == 0 ? 'italic' : '' }">采用绑定对象的方式实现class和style的赋值</a><hr><a href="javascript:;" :class="['link', 'active-link', { fm }]":style="['letter-spacing:6px;', { 'text-decoration': 'none', fontStyle: count % 2 == 0 ? 'italic' : '' }]">采用数组绑定的方式实现class和style</a></div><button @click="count++">count++</button>
    </template><style scoped>
    hr {margin: 2vh 0;
    }.link {color: gray;
    }.active-link,
    .activeLink {font-weight: bold;
    }.fm {font-family: "楷体";
    }
    </style>
    

5.2 style 样式绑定

  • 绑定对象语法

    v-bind:style = { 样式名:样式值,样式名1:样式值1,…,样式名n:样式值n }

  • 绑定数组语法

    v-bind:style = [值1,值2,…,值n]

    值1,值2,…,值n 需要在 data 中使用对象定义样式和样式值

    <script setup>
    import { ref, reactive, computed } from 'vue'const clsName = "active-link"
    // 通过 ref 声明的数据,在 script 中,需要通过 .value 获取和修改值;在 template 模板中使用时,则不需要通过 .value 获取值,模板会自动解析数据
    const count = ref(0)// 注意:这里如果想要在count值修改后,实时响应数据变化,需要采用计算属性
    const clsObj = computed(() => ({link: true,activeLink: count.value % 2 == 0
    }))let fm = ref(true)
    </script>
    <template><div><!-- 基于 v-bind 指令,增强绑定 class类 与 style样式,这两个属性值除了可以使用字符串外,还可以使用对象和数组的绑定 --><a href="javascript:;" :class="clsName" class="link" style="text-decoration:none;":style="'font-style:italic;'">超链接标签演示字符串类型的class和style绑定</a><hr><a href="javascript:;" :class="clsObj":style="{ 'text-decoration': 'none', fontStyle: count % 2 == 0 ? 'italic' : '' }">采用绑定对象的方式实现class和style的赋值</a><hr><a href="javascript:;" :class="['link', 'active-link', { fm }]":style="['letter-spacing:6px;', { 'text-decoration': 'none', fontStyle: count % 2 == 0 ? 'italic' : '' }]">采用数组绑定的方式实现class和style</a></div><button @click="count++">count++</button>
    </template><style scoped>
    hr {margin: 2vh 0;
    }.link {color: gray;
    }.active-link,
    .activeLink {font-weight: bold;
    }.fm {font-family: "楷体";
    }
    </style>
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/70499.shtml

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

相关文章

一文了解Android App Bundle 格式文件

1. Android App Bundle 是什么&#xff1f; 从 2021 年 8 月起&#xff0c;新应用需要使用 Android App Bundle 才能在 Google Play 中发布。 Android App Bundle是一种发布格式&#xff0c;打包出来的格式为aab&#xff0c;而之前我们打包出来的格式为apk。编写完代码之后&a…

uni-app语音转文字功能demo(同声传译)

目录 首先去微信开发者官网申请一下同声传译的插件 微信公众平台 在文件中开始引用&#xff1a; 首先去微信开发者官网申请一下同声传译的插件 微信公众平台 后续使用的时候可以看详情里面的信息进行使用 在文件中开始引用&#xff1a; 注意&#xff01;&#xff01;在这个…

2023年了,java后端还有未来吗?

前言 Java当下确实是比较的内卷&#xff0c;但关键在于个人&#xff0c;可以看看不同地方&#xff08;这里主要举例北上广深一线城市&#xff09;对于Java开发工程师这个职位的具体要求&#xff1a; 在以下北上广深这些一线大城市的面试招聘当中不难看出&#xff0c;凡是工资…

二维码智慧门牌管理系统:让城市管理更智能、便捷

文章目录 前言一、二维码智慧门牌管理系统的特点二、数据集约化与规范化三、管理智能化与长效化四、标识规范化与易维护五、服务多元化与便捷化 前言 随着城市化进程的加速&#xff0c;城市管理面临着越来越多的挑战。为了解决地名地址管理交织错综、地名地址支撑政府管理成效…

自动驾驶中间件

自动驾驶中间件 1. 什么是中间件2. 中间件的分类3. 自动驾驶为什么需要中间件4. 通信中间件 Reference&#xff1a; 自动驾驶中间件&#xff1a;量产落地的关键技术通俗易懂的告诉你什么是中间件 对于初入自动驾驶行业的人来说&#xff0c;各色各样的新型传感器、线控系统、芯…

QT 初识多线程

1.QThread线程基础 QThread是Qt线程中有一个公共的抽象类&#xff0c;所有的线程类都是从QThread抽象类中派生的&#xff0c;需要实现QThread中的虚函数run(),通过start()函数来调用run函数。 void run&#xff08;&#xff09;函数是线程体函数&#xff0c;用于定义线程的功能…

第 2 章 线性表 (线性表的单链表存储结构实现)

1. 背景说明 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H/* 函数结果状态码 */ #define TRUE 1 /* 返回值为真 */ #define FALSE 0 /* 返回值为假 */ #define RET_OK 0 /* 返回值正确 */ #d…

计算机网络的故事——HTTP首部

HTTP首部 在HTTP协议通信交互中使用的首部字段。不限于RFC2616中定义的47种首部字段&#xff0c;还有Cookie、setCookie和Content-Disposition等 HTTP 首部字段将定义成缓存代理和非缓存代理的行为&#xff0c;分成 2 种类型。端到端首部和逐跳首部

关于vscode的GitLens插件里的FILE HISTORY理解

最近在用vscode的GitLens插件开发项目遇到这个疑问&#xff0c;先看图&#xff1a; 每当我点击FILE HISTORY 一个commit时&#xff0c;正常来说显示器会自动将点击的提交版本和它上一个提交版本进行比较&#xff0c;如果单纯这么理解的话就错了&#xff0c;因为GitLens的File …

企业工程项目管理系统源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&am…

【android12-linux-5.1】【ST芯片】【RK3588】【LSM6DSR】HAL源码分析

一、环境介绍 RK3588主板搭载Android12操作系统,内核是Linux5.10,使用ST的六轴传感器LSM6DSR芯片。 二、芯片介绍 LSM6DSR是一款加速度和角速度(陀螺仪)六轴传感器,还内置了一个温度传感器。该芯片可以选择I2C,SPI通讯,还有可编程终端,可以后置摄像头等设备,功能是很…

第二证券:为什么a股放开做空机制?

对于很多一般出资者来说&#xff0c;做空股票是一件十分复杂和困难的工作&#xff0c;可是对于专业的出资者和组织来说&#xff0c;这供给了一个愈加自由的商场买卖环境。那么&#xff0c;为什么A股放开做空机制呢&#xff1f;我们从多个视点来分析&#xff1a; 视点一&#x…

合宙Air724UG LuatOS-Air LVGL API控件--容器 (Container)

容器 (Container) 容器是 lvgl 相当重要的一个控件了&#xff0c;可以设置布局&#xff0c;容器的大小也会自动进行调整&#xff0c;利用容器可以创建出自适应成都很高的界面布局。 代码示例 – 创建容器 cont lvgl.cont_create(lvgl.scr_act(), nil) lvgl.obj_set_auto_re…

图文版:以太网二层接口类型(含配套习题)

常见的以太网二层接口类型包括以下三种&#xff1a; 一、Access接口 access链路类型端口&#xff0c;一种交换机的主干道模式&#xff0c;2台交换机的2个端口之间是否能够建立干道连接&#xff0c;取决于这2个端口模式的组合。 Access端口在收到以太网帧后打开VLAN标签&#…

前端(十七)——gitee上开源一个移动端礼盒商城项目(前端+后台)

&#x1f917;博主&#xff1a;小猫娃来啦 &#x1f917;文章核心&#xff1a;gitee上开源一个移动端礼盒商城项目 文章目录 前言开源地址项目运行命令项目基本展示前端效果细节展示视频前端代码细节展示视频后台效果展示后台代码展示经典优势思维导图实现思路 前言 项目样式老…

富士康曲线救国,iPhone 15 Pro订单较上代有减少,iPhone 15增加

据外媒报道&#xff0c;苹果将于9月13日凌晨举行的秋季新品发布会上推出iPhone 15系列智能手机。然而&#xff0c;令人惊讶的是&#xff0c;这款备受期待的手机在8月份就已开始批量生产&#xff0c;以确保上市初期供应充足。 随着iPhone 15系列发布时间的临近&#xff0c;越来越…

怎么处理zk或redis脑裂

很极端场景会出现脑裂 什么是分布式的脑裂 怎么理解zk脑裂 就是ZK&#xff0c;与客户端可能因为网络原因&#xff0c;客户端A还在跑着后续程序&#xff0c;而zk与客户端之前的心跳断了&#xff0c;此zk就把这节点给删除了&#xff0c;这时另一个客户会加锁成功&#xff0c;就样…

CSS中如何实现文字跑马灯效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 跑马灯⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋…

攻防世界-WEB-php_rce

打开靶机链接 搜村ThinkPhP V5存在远程命令执行的漏洞 构建payload /index.php?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1][]ls 查询当前目录文件&#xff0c;没有发现flag。调整payload 得到flag文件&#xff0c;修…

Hadoop的第二个核心组件:MapReduce框架第四节

Hadoop的第二个核心组件&#xff1a;MapReduce框架 十、MapReduce的特殊应用场景1、使用MapReduce进行join操作2、使用MapReduce的计数器3、MapReduce做数据清洗 十一、MapReduce的工作流程&#xff1a;详细的工作流程第一步&#xff1a;提交MR作业资源第二步&#xff1a;运行M…