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

news2024/9/24 11:20:35

文章目录

    • 一、数据双向绑定
    • 二、事件绑定详解
      • 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.coloradmin.cn/o/958406.html

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

相关文章

数据库知识3

DML 语言 SQL 语言 DDL语言 数据库定义语言 创 create 改 alter 删 dropDML语言 数据库操作语言 对表中的数据进行操做 增 insert 删 delete 改 update insert 插入操作 格式1: insert into 表名(列名1&#xff0c;列名2&#xff0c;…) values(values1&#xff0c;values2&…

【全国大学生IoT设计竞赛】安谋科技赛题三等奖分享:灵飞云卫——基于MM32F5的IOT智慧门禁系统

本文参加极术社区和灵动微电子组织的【有奖征集】分享作品传播技术成果&#xff0c;更有奖品等你来领&#xff01;线上征集活动。 2023年全国大学生物联网设计竞赛已经落下帷幕&#xff0c;下面将为大家分享我们的作品。 团队介绍 参赛单位&#xff1a;河海大学 队伍名称&…

图 Graph

关键词&#xff1a;图、邻接矩阵、邻接表、广度优先搜索、最短路径、深度优先搜索、拓扑排序、最小生成树、单源最短路径、Dijkstra算法、 图的表示 图的两种表示方法&#xff1a;邻接矩阵表示和邻接表表示。 图的广度优先搜索 可处理无向图或有向图 从起始顶点s出发的广度优…

群晖NAS:DS Video、Jellyfin等视频电影电视剧海报、背景墙搜刮器

群晖NAS&#xff1a;DS Video、Jellyfin等视频电影电视剧海报、背景墙搜刮器 本文只使用豆瓣插件方式&#xff0c;系统默认的 The Movie Database 好注册&#xff0c;但是授权码输入后域名不通过&#xff0c;很麻烦。 1、插件地址&#xff1a; https://www.aliyundrive.com/s…

visual studio编写DLL,python调用

选择第一个c DLL&#xff0c; 然后项目源文件下右击新建项&#xff0c;这里名字随便取&#xff0c;在代码中输入一下内容&#xff1a; #include <iostream>#define EXPORT extern "C" __declspec(dllexport)EXPORT int sub(int a, int b) {return a - b; } 在…

虚幻引擎4中关于设置关于体坐标系下的物体速度的相关问题

虚幻引擎4中关于设置关于体坐标系下的物体速度的相关问题 文章目录 虚幻引擎4中关于设置关于体坐标系下的物体速度的相关问题前言全局坐标系转体坐标系速度设置X轴方向的体坐标系速度设置Y轴方向的体坐标系速度XY轴体坐标系速度整合 Z轴速度的进一步设置解决办法 小结 前言 利…

图扑软件 | 参展用友 2023 全球商业创新大会

2023 年 8 月 18 日&#xff0c;以“数据驱动&#xff0c;智能运营”为主题的用友 2023 全球商业创新大会&#xff0c;在上海国家会展中心圆满举行。此次大会旨在汇聚全球商业智慧&#xff0c;用数智化创新客户价值、释放企业潜能&#xff0c;助力更多的企业成为数智企业。 图…

运动耳机需要具备哪些功能、挂耳式运动蓝牙耳机推荐

作为运动爱好者&#xff0c;长时间的运动很容易枯燥&#xff0c;所以我会选择佩戴耳机来缓解运动的枯燥感&#xff0c;一款好的运动耳机可以让运动变得更加激情&#xff0c;还可以更好的享受运动的乐趣。 但现在的运动耳机产品实在是五花八门&#xff0c;到底什么样的运动蓝牙耳…

ssm+vue框架的购物网站源码和论文

ssmvue框架的购物网站源码和论文113 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归…

Node 执行命令时传参 process.argv

process 对象是一个全局变量&#xff0c;提供当前 Node.js 进程的有关信息&#xff0c;以及控制当前 Node.js 进程。 因为是全局变量&#xff0c;所以无需使用 require()。 process.argv 属性返回一个数组&#xff0c;这个数组包含了启动Node.js进程时的命令行参数&#xff0c…

仅当指定列列表,且SET IDENTITY_INSERT为ON时,才能对自增列赋值

达梦数据库&#xff0c;对自增主键赋值插入&#xff0c;报错仅当指定列列表&#xff0c;且SET IDENTITY_INSERT为ON时&#xff0c;才能对自增列赋值&#xff1b; INSERT INTO cloud.account (id, uuid, account_name, type, role_id, domain_id, account."default")…

python实现个税计算器

本文主要内容&#xff1a;实现个税计算器 这里要用到两个计算公式&#xff1a; 1.应纳税所得额 工资金额 &#xff0d; 各项社会保险费 - 起征点(3500元) 2.应纳税额 应纳税所得额 税率 &#xff0d; 速算扣除数 税率按照以下表格计算&#xff1a; 代码如下&#xff1a;…

恒流电路的三种设计方案

作为硬件研发工程师相信对恒流电路不会陌生&#xff0c;本文介绍下三种恒流电路的原理图。 三极管恒流电路 三极管恒流电路 三极管的恒流电路&#xff0c;主要是利用Q2三极管的基级导通电压为0.6~0.7V这个特性&#xff1b;当Q2三极管导通&#xff0c;Q1三极管基级电压被拉低而…

链表OJ练习(1)

一、移除链表元素 本题为力扣原题203 题目介绍&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 列表中的节点数目范围在 0~10000内 1<Node.val<50 0<val<50 …

【Java Web】敏感词过滤

一、前缀树 假设有敏感词&#xff1a;b&#xff0c;abc&#xff0c;abd&#xff0c;bcd&#xff0c;abcd&#xff0c;efg&#xff0c;hii 那么前缀树可以构造为&#xff1a; 二、敏感词过滤器 package com.nowcoder.community.util;import org.apache.commons.lang3.CharUt…

kvm 虚拟机添加网卡方法

找到kvm虚拟机的配置文件 虚拟机名称.xml kvm虚拟机配置文件默认路径&#xff1a;/etc/libvirt/qemu/ 先停kvm虚拟机 virsh shutdown 虚拟机名称 修改kvm虚拟机配置文件 virsh edit 虚拟机名称 在kvm虚拟机里面配置新增接口如下内容&#xff1a; <interface typebridg…

【MetaAI】2023年MetaAI发布的开源模型和工具

MetaAI开源模型和工具 MetaAILlamaSegment AnythingDINOv2ImageBindMMSLimaVoiceboxMusicGenLlama 2AudioCraftSeamlessM4T MetaAI Meta 首席执行官扎克伯格表示&#xff0c;与其他研究者分享 Meta 公司开发的模型可以帮助该公司促进创新、发现安全漏洞和降低成本。他今年 4 月…

Python中处理Excel文件的常见问题与技巧

在数据分析和办公自动化领域&#xff0c;Excel是一种广泛使用的工具。本文将介绍如何利用Python来处理Excel文件时可能遇到的常见问题&#xff0c;并分享一些实用技巧。 1. 安装必要库 - 使用pip或conda安装openpyxl、pandas等第三方库&#xff1b; – 确保所选版本兼容性以及…

基于Django 框架搭建的机器学习在线平台源代码+数据库,实现KNN、ID3、C4.5、SVM、朴素贝叶斯、BP神经网络等算法及流程管理

结果展示&#xff08;Kmeans&#xff09;&#xff1a; 完整代码下载地址&#xff1a;基于Django 框架搭建的机器学习在线平台源代码数据库 python机器学习之 K-邻近算法 简单的理解&#xff1a;[ 采用测量不同特征值之间的距离方法进行分类 ] 优点 &#xff1a;精度高、对异常…

ABAP FICO 凭证替代 凭证校验

凭证校验 1.T-CODE--->GGX2--->GBLR-->ZRGGBR000 2.将程序RGGBR000 复制为ZRGGBR000 3.GGB0--》财务会计--》凭证抬头或者行项目维护检验规则 4.OB28 维护特定的公司代码和调用点和确认&#xff0c;活动等级设置为1 5.GGB4-->激活校验 凭证替代 1.T-CODE--->GG…