Vue2指令

本节目标

掌握vue指令

  • 定义
  • 常用指令
  • 案例-小黑记事本
  • 指令修饰符

介绍

指令就是带有v-前缀的标签属性, 不同的指令, 可以实现不同的功能

常用指令

渲染指令

语法: v-html

  1. 动态渲染标签
  2. 作用: 动态设置元素的innerHTML
  3. 场景: 用来动态解析标签

语法: v-text

  1. 动态渲染文本
  2. 会覆盖标签内部的原本的内容
  3. 不识别标签

语法: {{ }}

  1. 插值表达式
  2. 专门解决内容覆盖问题

显示隐藏

语法: v-show

  1. 作用: 控制元素显示隐藏
  2. 示例: v-show="表达式" 表达式值为true显示, false隐藏
  3. 原理: 切换display:none 控制显示隐藏
  4. 场景: 频繁切换

动态创建

语法: v-if

  1. 作用: 控制元素创建或销毁
  2. 示例: v-if="表达式" 表达式值为true显示,false隐藏
  3. 原理: 基于条件判断,创建或移除元素
  4. 场景: 要么显示要么隐藏的场景
  5. 补充:
  • v-else/v-else-if
  • 辅助v-if进行复杂的判断渲染

事件绑定

语法: v-on

  1. 作用: 注册事件 = 添加监听 + 提供处理逻辑
  2. 语法: v-on:事件名=内联语句

v-on:事件名="methods中的函数名"

  1. 简写: @事件名="内联语句"
  2. 区别: 内联语句可以直接访问数据, methods中的方法需要使用this访问实例
  3. 补充: methods中的方法, this都会指向当前实例
  4. 传参: @click="fn(参数1, 参数2)"
  5. 接收: fn(a, b) { ... ... }
  6. 完整传参: 直接传递参数,会覆盖事件对象, 如果两种参数都需要, 往下看↓
  • 方式1: vue提供了内置变量, 名为$event, 就是原生的DOM事件对象

@click="函数名($event, 参数1, 参数2)"

  • 方式2: 使用箭头函数包装一层, 可以保留原本的事件对象, 再通过调用函数传参

@click="(value)=> 函数名(value, 参数1, 参数2)"

属性绑定

语法: v-bind:属性名="表达式"

  1. 作用: 动态的设置html标签的属性( src/ url/ title/)
  2. 简写: :属性名="表达式"

动态样式

为了方便开发者进行样式控制, Vue扩展了v-bind的语法, 可以针对class类名和style行内样式进行控制

1>class类名

a. 对象写法

语法: :class="{ 类名1: 布尔值, 类名2: 布尔值 }"

场景: 适合一个类名, 来回切换

案例:

<body><!-- 目标:实现tab导航高亮切换思路: 1, 基于数据动态渲染tab2, 准备一个变量, 记录高亮的下标3, 基于高亮标识, 动态控制class类型  4, 高亮切换的核心, 就是切换下标--><div id="app"><ul><li v-for="(item,index) in list" :key="item.id" @click="activeIndex=index"><a :class="{ active: activeIndex===index }" href="#">{{ item.name }}</a></li></ul></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {activeIndex: 0, // 高亮标识list: [{ id: 1, name: '京东秒杀' },{ id: 2, name: '每日特价' },{ id: 3, name: '品类秒杀' }]}})</script>
</body>

b. 数组写法

语法: :class="[类名1, 类名2, 类名3]"

场景: 适合批量添加或删除类名

2>行内style

语法: :style="{ css属性名1: css属性值1, css属性名2: css属性值2, }"

场景: 某个具体属性的控制

补充: 如果是复合属性名( 如background-color), 需要大驼峰或引号包裹, 否则报错

案例:

<body><div id="app"><!-- 外层盒子(黑色容器) --><div class="progress"><!-- 内层盒子(蓝色进度) --><div class="inner" :style="{ width: progress + '%' }"><span>{{progress}}%</span></div></div><button @click="progress=25">设置25%</button><button @click="progress=50">设置50%</button><button @click="progress=75">设置75%</button><button @click="progress=100">设置100%</button></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {progress: 25,}})</script>
</body>

循环渲染

语法: v-for="(item,index) in 数组" :key="唯一标识"

  1. 作用: 基于数据循环, 多次渲染整个元素
  2. 范围: 可以循环数组, 对象, 数字
  3. item是数组元素, index是下标
  4. key的作用是给元素添加唯一标识, 保证Vue对列表的正确排序和复用
  5. key的值只能是字符串或数字类型
  6. key的值必须具有唯一性
  7. 推荐使用id作为key, 单纯的渲染可以使用index作为key

key的原理

v-for的默认行为会尝试原地修改元素(就地复用)

加key的执行过程

  1. 要删除第一条数据

  1. 根据key的值对比ODM,

值相等就删除该DOM,

剩下的DOM复用

  1. 可以正确的更新DOM,

删除DOM-1,

留下2-3-4

不加key的执行过程

  1. 要删除第一条数据

  1. 根据原地复用规则复用DOM

把数据2更新到DOM1中

把数据3更新到DOM2中

把数据4更新到DOM3中

删除DOM4

  1. 错误的更新DOM,

删除DOM-4,

留下1-2-3

双向绑定

语法: v-model="变量"

  1. 作用: 给表单元素使用, 快速设置或获取表单元素内容
  2. 数据变化 -> 视图自会更新
  3. 视图变化 -> 数据自动同步

其他表单

常见的表单元素都可以使用v-model绑定关联,快速获取和设置表单元素的值

说明

它会根据控件的类型,自定选取正确的方法更新元素

特定修饰符

它们是 v-model 指令的特定修饰符,提供了额外的功能来处理用户输入。

示例 <input type="text" v-model.number="username">

  1. .number 将用户输入的值变成数值类型
  2. .trim 去除首位两侧的空格
  3. .lazy 在'change'时而非'input'时更新(只同步最后的结果,不同步修改的过程)

案例

<body><!-- 目标: 使用v-model收集多种表单类型的值--><div id="app"><h3>小黑学习网</h3>姓名:<input type="text" v-model="name"><br><br>是否单身:<input type="checkbox" v-model="isSingle"><br><br><!-- 前置理解:1. name:  给单选框加上 name 属性 可以分组 → 同一组互相会互斥2. value: 给单选框加上 value 属性,用于提交给后台的数据结合 Vue 使用 → v-model-->性别:<input type="radio" name="gender" value="1" v-model="gender">男<input type="radio" name="gender" value="0" v-model="gender">女<br><br><!-- 前置理解:1. option 需要设置 value 值,提交给后台2. select 的 value 值,关联了选中的 option 的 value 值结合 Vue 使用 → v-model-->所在城市:<select v-model="city"><option value="101">北京</option><option value="102">上海</option><option value="103">成都</option><option value="104">南京</option></select><br><br>自我描述:<textarea v-model="desc"></textarea><button>立即注册</button></div><script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {name: '',isSingle: 'true',gender: '1',city: '101',desc: ''}})</script>
</body>

案例-小黑记事本

需求

  1. 列表渲染
  2. 删除功能
  3. 添加功能
  4. 统计和清空
<body><!-- 主体区域 --><section id="app"><!-- 输入框 --><header class="header"><h1>小黑记事本</h1><input v-model="newTodo" placeholder="请输入任务" class="new-todo" /><button @click="addTodo" class="add">添加任务</button></header><!-- 列表区域 --><section class="main"><ul class="todo-list"><li class="todo" v-for="(item, index) in list" :key="item.id"><div class="view"><span class="index">{{ index + 1 }}.</span> <label>{{ item.name }}</label><button @click="deleteItem(item.id)" class="destroy"></button></div></li></ul></section><!-- 统计和清空 --><footer class="footer" v-show="list.length>0"><!-- 统计 --><span class="todo-count">合 计:<strong> {{ list.length }} </strong></span><!-- 清空 --><button @click="clear" class="clear-completed">清空任务</button></footer></section><!-- 底部 --><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {newTodo: '',list: [{ id: 1, name: '跑步一公里' },{ id: 2, name: '跳绳500次' },{ id: 3, name: '游泳100米' },]},methods: {// 删除任务deleteItem(id) {this.list = this.list.filter(item => item.id !== id)},// 添加任务addTodo() {if (!this.newTodo.trim()) {alert('请输入任务内容')return}this.list.unshift({ id: + new Date(), name: this.newTodo })this.newTodo = ''},// 清空clear() {this.list = []}}})</script>
</body>

指令修饰符

通过" . " 指明一些指令后缀, 不同后缀封装了不同的处理操作, 帮助我们简化代码

按键修饰符

@Keyup.enter -> 监听键盘回车事件

@keyup.esc -> 监听esc事件

v-model修饰符

v-model.trim -> 去除收尾空格

v-model.number -> 转数字(转换失败保留原值)

事件修饰符

@事件名.stop -> 阻止事件冒泡

@事件名.prevent -> 阻止默认行为

@事件名.once -> 事件只触发一次

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

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

相关文章

气膜羽毛球馆如何提升运动体验—轻空间

随着人们对健康和运动的关注度日益增加&#xff0c;羽毛球作为一项受欢迎的运动&#xff0c;得到了越来越多人的喜爱。而气膜羽毛球馆&#xff0c;以其独特的优势&#xff0c;正在改变传统羽毛球馆的运动体验。那么&#xff0c;气膜羽毛球馆是如何提升运动体验的呢&#xff1f;…

神经网络 torch.nn---Non-Linear Activations (ReLU)

ReLU — PyTorch 2.3 documentation torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) 非线性变换的目的 非线性变换的目的是为神经网络引入一些非线性特征&#xff0c;使其训练出一些符合各种曲线或各种特征的模型。 换句话来说&#xff0c;如果模型都是直线特征的…

C#之EntityFramework的应用

目录 1&#xff0c;名词概述。 2&#xff0c;实体数据模型EDM介绍。 3&#xff0c;规范函数。 4&#xff0c;查看Linq转换成的SQL语句。 5&#xff0c;数据的增删改查。 5.1&#xff0c;数据查询 5.2&#xff0c;数据插入 5.3&#xff0c;数据更新 5.4&#xff0c;数据…

【android】设置背景图片

改变值&#xff0c;可显示zai在 在theves下面的两个value都要增加名字代码 <item name"windowActionBar">false</item><item name"android:windowNoTitle">true</item><item name"android:windowFullscreen">tru…

Base64前端图片乱码转换

title: Base64码乱转换 date: 2024-06-01 20:30:28 tags: vue3 后端图片前端显示乱码 现象 后端传来一个图片&#xff0c;前端能够接收&#xff0c;但是console.log()后发现图片变成了乱码&#xff0c;但是检查后台又发现能够正常的收到了这张图片。 处理方法 笔者有尝试将…

联想Y410P跑大模型

安装vs 2017 查看GPU版本 查看支持哪个版本的cuda windows cuda更新教程_cuda 12.0-CSDN博客 下载并安装cuda tookit 10.1 CUDA Toolkit 10.1 Update 2 Archive | NVIDIA Developer 找到下载的文件&#xff0c;安装 参考安装链接 Win10 Vs2017 CUDA10.1安装&#xff08;避坑…

【C语言】10.C语言指针(4)

文章目录 1.回调函数是什么&#xff1f;2.qsort 使⽤举例2.1 使⽤qsort函数排序整型数据2.2 使⽤qsort排序结构数据 3.qsort函数的模拟实现 1.回调函数是什么&#xff1f; 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数…

kafka-消费者-指定offset消费(SpringBoot整合Kafka)

文章目录 1、指定offset消费1.1、创建消费者监听器‘1.2、application.yml配置1.3、使用 Java代码 创建 主题 my_topic1 并建立3个分区并给每个分区建立3个副本1.4、创建生产者发送消息1.4.1、分区0中的数据 1.5、创建SpringBoot启动类1.6、屏蔽 kafka debug 日志 logback.xml1…

服务器数据恢复—EqualLogic存储硬盘灯亮黄色的数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌EqualLogic PS 6011型号存储&#xff0c;底层有一组由16块SAS硬盘组建的RAID5阵列&#xff0c;上层存储空间划分了4个卷&#xff0c;格式化为VMFS文件系统&#xff0c;存放虚拟机文件。 服务器故障&#xff1a; 存储设备上两块硬盘指…

基于STC89C52单片机空气PM2.5系统设计资料

#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char //宏定义sbit RSP1^6;//液晶接口sbit ENP1^7;sbit LED P2^0;//粉尘传感器控制接口sbit ADCS P3^7;//AD0832接口sbit ADCLK P3^5;sbit ADDI P3^6;sbit ADDO P3^6;…

【大模型】基于Hugging Face调用及微调大模型(1)

文章目录 一、前言二、Transformer三、Hugging Face3.1 Hugging Face Dataset3. 2 Hugging Face Tokenizer3.3 Hugging Face Transformer3.4 Hugging Face Accelerate 四、基于Hugging Face调用模型4.1 调用示例4.2 调用流程概述4.2.1 Tokenizer4.2.2 模型的加载4.2.3 模型基本…

# RocketMQ 实战:模拟电商网站场景综合案例(二)

RocketMQ 实战&#xff1a;模拟电商网站场景综合案例&#xff08;二&#xff09; 一、SpringBoot 整合 Dubbo &#xff1a;dubbo 概述 1、dubbo 概述 Dubbo &#xff1a;是阿里巴巴公司开源的一款高性能、轻量级的 Java RPC 框架&#xff0c;它提供了三大核心能力&#xff1a…

【WP】猿人学15_备周则意怠_常见则不疑

https://match.yuanrenxue.cn/match/15 抓包分析 抓包分析有一个m参数&#xff0c;三个数字组成 追栈/扣代码 根据启动器顺序追栈&#xff0c;一般优先跳过 jQuery 直接能找到加密函数 每次获取的数字都不一样 window.m function() { t1 parseInt(Date.parse(new Date(…

【全开源】Java共享茶室棋牌室无人系统支持微信小程序+微信公众号

打造智能化休闲新体验 一、引言&#xff1a;智能化休闲时代的来临 随着科技的飞速发展&#xff0c;智能化、无人化服务逐渐渗透到我们生活的各个领域。在休闲娱乐行业&#xff0c;共享茶室棋牌室无人系统源码的出现&#xff0c;不仅革新了传统的休闲方式&#xff0c;更为消费…

Marin说PCB之如何在主板上补偿链路中的走线的等长误差?

一场雨把我困在这里&#xff0c;你冷漠地看我没有穿雨衣淋成落汤鸡。今天刚刚出门时候看天气预报没有雨&#xff0c;于是我就没有带雨衣骑电动车去公司了&#xff0c;谁知道回来的路上被淋成狗了。天气预报就像是女人的脾气那样&#xff0c;不能完全相信的。 好了&#xff0c;我…

什么是视频号招商团长?如何加入成为视频号招商团长

视频号招商团长&#xff0c;是通过微信视频号平台的线上和线下活动&#xff0c;撮合商家和达人进行合作&#xff0c;帮助商家、达人在视频号成长发展&#xff1b;同时还可以通过邀请内容创作者入驻微信视频号并为其提供支持&#xff1b;从而获取佣金收益的&#xff0c;而其作用…

【LeetCode算法】第100题:相同的树

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;二叉树的先序遍历。采用递归的先序遍历方法&#xff0c;首先访问根节点若不同则返回false&#xff0c;其次访问左子树和右子树。在访问左右子树时&#xff0c;需要注意…

CAN总线学习笔记-CAN帧结构

数据帧 数据帧&#xff1a;发送设备主动发送数据&#xff08;广播式&#xff09; 标准格式的11ID不够用了&#xff0c;由此产生了扩展格式 SOF&#xff1a;帧起始&#xff0c;表示后面一段波形为传输的数据位 ID&#xff1a;标识符&#xff0c;区分功能&#xff0c;同时决定优…

【qt】项目移植

项目移植 一.前言二.同名问题三.具体操作1.修改文件名2.修改类名3.修改一些不能自动改的名4.修改.ui文件5.删除原来自动生成的ui_xxx.h文件6.修改头文件 四.导入项目五.使用导入的项目六.项目建议 一.前言 终于概率论考完了,有时间了,接着上个项目,我们继续来完成我们的多窗口开…

探索 LLM 预训练的挑战,GPU 集群架构实战

万卡 GPU 集群实战&#xff1a;探索 LLM 预训练的挑战 一、背景 在过往的文章中&#xff0c;我们详细阐述了LLM预训练的数据集、清洗流程、索引格式&#xff0c;以及微调、推理和RAG技术&#xff0c;并介绍了GPU及万卡集群的构建。然而&#xff0c;LLM预训练的具体细节尚待进一…