Vue——响应式数据,v-on,v-bind,v-if,v-for(内含项目实战)

目录

响应式数据

ref

reactive

事件绑定指令 v-on

v-on 鼠标监听事件

 v-on 键盘监听事件

 v-on  简写形式

 属性动态化指令 v-bind

iuput标签动态属性绑定

img标签动态属性绑定

b标签动态属性绑定

 v-bind 简写形式

条件渲染指令 v-if

 遍历指令 v-for

遍历对象的值 

 遍历对象的值和索引

 遍历对象的值和键

 遍历对象的值,键和索引

 指令嵌套

 项目实战

文字按钮切换图片

v-on切换上一张

v-on切换下一张

v-bind绑定图片的路径

 数字按钮跳转图片

数字按钮

跳转函数设置

跳转函数绑定

完整代码


响应式数据

响应式数据是指数据在改变时能够自动更新,我们可以通过 ref, reactive 让数据变成响应式

ref

可以定义基本类型的响应式变量

let xxx=ref(初始值)

<div id="app">   <p>个人信息:</p><p>性别:{{ gender }}</p><p>年龄:{{ age }}</p><button @click="genderChange">点击更改性别</button><br><button @click="ageChange">点击年龄加1</button></div><script type="module">// 导入响应数据类型 refimport {createApp,ref} from"./vue.esm-browser.js"createApp({setup(){let gender = "女";let age = ref(25);const genderChange=()=> {gender.value = "男";console.log("成功修改性别")}const ageChange=()=> {age.value += 1;console.log("成功加1")}return{gender,age,genderChange,ageChange}}}).mount("#app");</script>

reactive

定义对象类型数据

<div id="app">   <p>个人信息:</p><p>年龄:{{ test_1.age }}</p><p>性别:{{ test.gender }}</p><button @click="ageChange">点击年龄加1</button><br><button @click="genderChange">点击更改性别</button></div><script type="module">// 导入响应数据类型 reactiveimport {createApp,reactive} from"./vue.esm-browser.js"createApp({setup(){const test={gender:"女"};const genderChange=()=> {test.gender = "男";console.log("成功修改性别")}const test_1=reactive({age:18});const ageChange=()=> {test_1.age +=1;console.log("成功加1")}return{test,test_1,genderChange,ageChange}}}).mount("#app");</script>

事件绑定指令 v-on

用于监听DOM事件并触发对应的方法,和JS中的监听器一样,可以在HTML元素上添加事件监听器,当这个事件被触发时,会执行指定的方法。

格式:v-on  :  click(监听的事件如:键盘或鼠标事件)="test_2"(监听的节点)

v-on 鼠标监听事件

 v-on  :  click(鼠标事件)="test_2"(监听的节点)

    <div id="app">     <h2>{{test_1.name}}</h2><button v-on:click="test_2">单击修改名字!</button></div><script type="module">import {createApp,ref,reactive} from"./vue.esm-browser.js"createApp({setup(){初始值const test_1=reactive({name:"木木",});修改的值const test_2=()=>{test_1.name="花花"console.log("鼠标单击成功!");}返回的值return{test_1,test_2,}}}).mount("#app");</script>

 单击按钮后

 v-on 键盘监听事件

v-on  :  keyup . v(监听键盘“  v ”)="test_2" (监听的节点)

            enter space tab 按键修饰符

            keyup是在用户松开按键时才触发

            keydown是在用户按下按键时立即触发

    <div id="app">     <h2>{{test_1.name}}</h2><button v-on:keyup.v="test_2">按下键盘v即可修改名字!</button></div><script type="module">import {createApp,ref,reactive} from"./vue.esm-browser.js"createApp({setup(){
初始值            const test_1 = reactive({name: "花花",});
修改值    const test_2 = () => {test_1.name ="木木",console.log("键盘修改名字成功!");}
返回值return{test_1,test_2,}}}).mount("#app");</script>

按下键盘前 

按下键盘后 

v-on 键盘组合快捷键: 


<button v-on:keyup.ctrl.enter="test_2">按下ctrl+enter即可修改名字!</button><button v-on:keyup.ctrl.a="test_2">按下ctrl+a即可修改名字!</button>

 v-on  简写形式

将 v-on: click 改为  @click  即为简写状态

以下为v-on 键盘事件和鼠标事件的简写形式:<button @click="test_2">单击修改名字!</button><button @keyup.enter="test_2">按下键盘enter即可修改名字!</button>
<button @keyup.Tab="test_2">按下键盘Tab即可修改名字!</button>
<button @keyup.space="test_2">按下键盘enter即可修改名字!</button>

 属性动态化指令 v-bind

用于将数据绑定到HTML元素的属性上。通过v-bind,将Vue的数据动态地绑定到HTML标签的属性上,可以动态显示数据。v-bind指令可以用于绑定HTML元素的任何属性。

格式: v-bind  :  src(标签内属性) =  "test.img"

iuput标签动态属性绑定

  <div id="app">     <img v-bind:src="test.img" ><br><button @click="change">单击更换照片</button></div><script type="module">import {createApp,ref,reactive} from"./vue.esm-browser.js"createApp({setup(){const test=reactive({img:"./img_src/logo1.png",});const change=()=>{test.img=`./img_src/logo2.png`;console.log("成功更换照片");}return{test,change,}}}).mount("#app");</script>

img标签动态属性绑定

 <div id="app">     <input type="text" v-bind:value="test.word"><br><button @click="change">单击补充句子</button></div><script type="module">import {createApp,ref,reactive} from"./vue.esm-browser.js"createApp({setup(){const test=reactive({word:"I need ",});const change=()=>{test.word+="you";console.log("句子补充完整啦!")}return{test,change,}}}).mount("#app");</script>

 单击前

单击后 

b标签动态属性绑定

 <style>.wordColor{color: blue;}</style>
</head>
<body><div id="app">     <b v-bind:class="{wordColor:test.wordStatu}">你好!!</b><br><button @click="change">单击更改文字颜色</button></div><script type="module">import {createApp,ref,reactive} from"./vue.esm-browser.js"createApp({setup(){
设置控制文本颜色的开关为 falseconst test=reactive({wordStatu: false});
当用户单击后,控制文本颜色的开关为  trueconst change=()=>{test.wordStatu=!test.wordStatu;console.log("颜色更改成功!");}return{test,change,}}}).mount("#app");

单击后 

 v-bind 简写形式

<img :src="test.img" >
<input type="text" :value="test.word">
<b :class="{wordColor:test.wordStatu}">你好!!</b>

条件渲染指令 v-if

可以隐藏节点,v-if是通过删除节点实现隐藏。当遇到需要频繁显示和隐藏的场景时,不适合使用v-if, 因为频繁增删节点,会导致渲染效率下降

 <div id="app">     <b v-if="test.word">你好!!</b><br><button @click="change">单击隐藏文字</button></div><script type="module">import {createApp,ref,reactive} from"./vue.esm-browser.js"createApp({setup(){const test=reactive({word: true});const change=()=>{test.word=!test.word;}return{test,change,}}}).mount("#app");</script>

 可以通过特定的条件来决定是否显示或隐藏特定的DOM元素,当条件为真时,v-if指令将元素添加到DOM中;当条件为假时,v-if指令将元素从DOM中移除。

<div id="app">     <p>{{test.watch}}w</p><p v-if="test.watch<=100">一般浏览量</p><p v-else-if="test.watch>100 && test.watch<=300">浏览量持续上升</p><p v-else-if="test.watch>300 && test.watch<=600">浏览量向千靠拢啦!努努力!</p><p v-else>恭喜你,火啦!!</p><button @click="add(40,50)">单击增加流量</button></div><script type="module">import {createApp,ref,reactive} from"./vue.esm-browser.js"createApp({setup(){const test=reactive({watch:0});const add=(a,b)=>{test.watch+=a+bconsole.log("浏览量为"+test.watch);}return{test,add}}}).mount("#app");</script>

单击后 

 遍历指令 v-for

指定一个数组或对象作为遍历的数据源,然后使用v-for指令来迭代数据源中的每一项

v-for  =  "(value值,index索引,key键 )in test.user(要遍历的数据源)"

遍历对象的值 

 <div id="app">   遍历数组内的值:  <p v-for="value in test.user">{{value}}</p></div>const test=reactive({user:{name:"木木",age:22,sex:"男",hobby:"读书"},number:["十一","十二","十三"]});return{test,}

 遍历对象的值和索引

写指令时,先值后索引

 <div id="app">     <p v-for="(value,index) in test.number">{{ index }} : {{ value }}
</p></div><script type="module">import {createApp,ref,reactive} from"./vue.esm-browser.js"createApp({setup(){const test=reactive({user:{name:"木木",age:22,sex:"男",hobby:"读书"},number:["十一","十二","十三"]});return{test,}}}).mount("#app");</script>

 遍历对象的值和键

 写指令时,先值后键

<p v-for="(value,key) in test.user">{{ key }} : {{ value }}
</p>

 遍历对象的值,键和索引

 写指令时,先值再键后索引

<p v-for="(value,key,index) in test.user">{{index}}: {{ key }} : {{ value }}
</p>

 指令嵌套

<template> 标签可以用来包装多个元素或者多行代码, 不会在页面中渲染

<template v-for="(value,key,index) in test.user"><p v-if="index == 0">  {{ index }} : {{ key }} : {{ value }}</p>   
</template>

 指令嵌套 运行结果

 项目实战

 做一个动态相册,如下图:

解析:

用v-on为切换相片的按钮绑定上一个函数,这个函数负责更改图片路径;

v-bind绑定图片的路径,使得图片路径可以自动更新

文字按钮切换图片

v-on切换上一张

注:图片的命名要有顺序的命名,方便实现功能

当我们点击上一张时,照片的数量是在不断减少的,并伴随着照片路径的更改

我们可以先给照片的数量和路径做一个初始值的设置;其次用函数来控制照片的数量及路径的改变;最后将函数绑定到按键上,通过v-on来监听鼠标事件并触发对应的方法

 初始值的设置

                const img=reactive({
照片数量                    num:1,
照片的路径                  url:"./img_src/logo1.png"});

照片数量及路径的改变

 上一张:                   const nagtive=()=>{
设置照片数量自减                  img.num--
当照片数减到0时                    if(img.num==0){
使照片数等于4                        img.num=4
这样就实现了一个循环的效果!          }照片路径的改变                    img.url=`./img_src/logo${img.num}.png`
照片的路径随照片数改变            }

v-on绑定按钮

<button @click="nagtive">上一张</button> 

v-on切换下一张

步骤与上面大庭相近,不同的是,当我们点击下一张时,照片的数量不断增加的,所以我们可以将上面自减的设置改为自加

                    const add=()=>{
照片数自加                img.num++
当到数量为5时             if(img.num==5){
使照片数回到1              img.num=1;
达到循环的效果                        }照片路径随照片数改变     img.url=`./img_src/logo${img.num}.png`}
<button @click="add">下一张</button>

v-bind绑定图片的路径

<img v-bind:src = "img.url" class="img" alt="图片加载失败">

 数字按钮跳转图片

数字按钮

利用遍历指令v-for来遍历 数据源(4)  以内的值,数字按钮就出来了

        <ul type="none" ><li v-for="value in 4">{{value}}</li></ul>

跳转函数设置

创建一个函数,这里命名为"jump",通过函数jump 调用v-for所遍历的值(value);将照片和路径绑定到数字按钮,第1张照片与数字按钮1绑定,以此类推

                    const jump=(value)=>{img.num=value;img.url=`./img_src/logo${img.num}.png`}

跳转函数绑定

通过v-on将跳转函数绑定到数字按钮上,监听鼠标事件并触发对应的方法

         <ul type="none" class="box"><li v-for="value in 4" @click="jump(value)">{{value}}</li></ul>

完整代码

<head><meta charset="UTF-8"><title>相册</title><style>
样式设置.img{width: 480px;  height: 240px;border: 1px bisque solid;}.box{margin-bottom: 20px;padding: 0;}ul li{float: left;background-color: bisque;height: 20px;width: 20px;margin-left: 10px;text-align: center;}</style>
</head><body><div id="app">
相册基本骨架<h2>基于Vue3实现的相册:展示第{{img.num}}张相片</h2><img v-bind:src = "img.url" class="img" alt="图片加载失败"> <ul type="none" class="box"><li v-for="value in 4" @click="jump(value)">{{value}}</li></ul><br><button @click="nagtive">上一张</button>   <button @click="add">下一张</button></div><script type="module">import { createApp, ref,reactive } from './vue.esm-browser.js'createApp({setup(){
初始值const img=reactive({num:1,url:"./img_src/logo1.png"});下一张                const add=()=>{img.num++if(img.num==5){img.num=1;}img.url=`./img_src/logo${img.num}.png`}
上一张const nagtive=()=>{img.num--if(img.num==0){img.num=4}img.url=`./img_src/logo${img.num}.png`}
跳转const jump=(value)=>{img.num=value;img.url=`./img_src/logo${img.num}.png`}return{img,add,nagtive,jump,}}}).mount("#app");</script>
</body>

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

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

相关文章

蓝桥杯c++算法秒杀【6】之动态规划【上】(数字三角形、砝码称重(背包问题)、括号序列、组合数问题:::非常典型的必刷例题!!!)

下将以括号序列、组合数问题超级吧难的题为例子讲解动态规划 别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01;! ! ! ! &#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 动态规划 一、数字三角形 【问题描述】 上图给出了一…

YOLO-FaceV2: A Scale and Occlusion Aware Face Detector

《YOLO-FaceV2:一种尺度与遮挡感知的人脸检测器》 1.引言2.相关工作3.YOLO-FaceV23.1网络结构3.2尺度感知RFE模型3.3遮挡感知排斥损失3.4遮挡感知注意力网络3.5样本加权函数3.6Anchor设计策略3.7 归一化高斯Wasserstein距离 4.实验4.1 数据集4.2 训练4.3 消融实验4.3.1 SEAM块4…

【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作

1.实验目的 熟悉了解掌握SQL Server软件的基本操作与使用方法&#xff0c;以及通过理论课学习与实验参考书的帮助&#xff0c;熟练掌握使用T-SQL语句和交互式方法对数据表进行插入数据、修改数据、删除数据等等的操作&#xff1b;作为后续实验的基础&#xff0c;根据实验要求重…

【Elasticsearch入门到落地】2、正向索引和倒排索引

接上篇《1、初识Elasticsearch》 上一篇我们学习了什么是Elasticsearch&#xff0c;以及Elastic stack(ELK)技术栈介绍。本篇我们来什么是正向索引和倒排索引&#xff0c;这是了解Elasticsearch底层架构的核心。 上一篇我们学习到&#xff0c;Elasticsearch的底层是由Lucene实…

【Spring Boot】# 使用@Scheduled注解无法执行定时任务

1. 前言 在 Spring Boot中&#xff0c;使用Scheduled注解来定义定时任务时&#xff0c;定时任务不执行&#xff1b;或未在规定时间执行。 import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component;Component public c…

STM32总体架构简单介绍

目录 一、引言 二、STM32的总体架构 1、三个被动单元 &#xff08;1&#xff09;内部SRAM &#xff08;2&#xff09;内部闪存存储器 &#xff08;3&#xff09;AHB到APB的桥&#xff08;AHB to APBx&#xff09; 2、四个主动&#xff08;驱动&#xff09;单元 &#x…

C# Postman或者PostApi调试前端webapi接口发送带有request/body/head信息

知识&#xff1a; 前端接口&#xff0c;表单形式提交。 req.ContentType "application/x-www-form-urlencoded"; x-www-form-urlencoded 是一种常见的 MIME 类型&#xff0c;用于将键值对编码为 HTTP 请求体中的 URL 编码格式。在 Web API 中&#xff0c;x-www-for…

李宏毅机器学习课程知识点摘要(1-5集)

前5集 过拟合&#xff1a; 参数太多&#xff0c;导致把数据集刻画的太完整。而一旦测试集和数据集的关联不大&#xff0c;那么预测效果还不如模糊一点的模型 所以找的数据集的量以及准确性也会影响 由于线性函数的拟合一般般&#xff0c;所以用一组函数去分段来拟合 sigmoi…

七、SElinux

一、SElinux简介 SELinux是Security-Enhanced Linux的缩写&#xff0c;意思是安全强化的linuxSELinux 主要由美国国家安全局(NSA)开发&#xff0c;当初开发的目的是为了避免资源的误用传统的访问控制在我们开启权限后&#xff0c;系统进程可以直接访问当我们对权限设置不严谨时…

小程序25- iconfont 字体图标的使用

项目中使用到图标&#xff0c;一般由公司设计进行设计&#xff0c;设计好后上传到阿里巴巴矢量图标库 日常开发过程中&#xff0c;也可以通过 iconfont 图标库下载使用自带的图标 补充&#xff1a;使用 iconfont 图标库报错&#xff1a;Failed to load font 操作步骤&#xff…

鸢尾花植物的结构认识和Python中scikit-learn工具包的安装

鸢尾花植物的结构认识和Python中scikit-learn工具包的安装 鸢尾花植物的结构认识和Python中scikit-learn工具包的安装 鸢尾花植物的结构认识和Python中scikit-learn工具包的安装一、鸢尾花的认识1.1 对花结构和功能认识1.2、鸢尾花认识1.2.1 鸢尾花种类1.2.2 鸢尾花结构 二. Py…

Unity3D 截图

使用 Unity3D 自带的截图接口&#xff0c;制作截图工具。 截图 有时候我们想对 Unity 的窗口进行截图&#xff0c;如果直接使用一些截图工具&#xff0c;很难截取到一张完整分辨率的图片&#xff08;例如&#xff0c;我们想要截取一张 1920 * 1080 的图片&#xff09;。 其实…

Mysql的加锁情况详解

最近在复习mysql的知识点&#xff0c;像索引、优化、主从复制这些很容易就激活了脑海里尘封的知识&#xff0c;但是在mysql锁的这一块真的是忘的一干二净&#xff0c;一点映像都没有&#xff0c;感觉也有点太难理解了&#xff0c;但是还是想把这块给啃下来&#xff0c;于是想通…

丹摩征文活动 | AI创新之路,DAMODEL助你一臂之力GPU

目录 前言—— DAMODEL&#xff08;丹摩智算&#xff09; 算力服务 直观的感受算力提供商的强大​ 平台功能介绍​ 镜像选择 云磁盘创建 总结 前言—— 只需轻点鼠标,开发者便可拥有属于自己的AI计算王国 - 从丰富的GPU实例选择,到高性能的云磁盘,再到预配置的深度学习…

Linux之日志

日志 在编写网络服务器, 各种软件时, 程序一定要打印一些日志信息. 1. 可以向显示器打印, 也可以向文件中写入. 2. 日志是软件在运行时记录的流水账, 用于排查服务进程挂掉的信息. 其中必须要有的是: 日志等级, 时间, 日志内容.可选的是文件名, 代码行数, 进程pid 等 日志…

IDEA指定Maven的settings不生效问题处理

文章目录 一、问题描述二、问题分析三、问题解决 一、问题描述 在Idea中手动指定了maven的settings配置文件&#xff0c;但是一直没生效。 如下图&#xff1a;设置加载settings-aliyun.xml文件&#xff0c;但是最后发现还是在加载settings.xml文件 二、问题分析 ‌在Intel…

【软考】数据库

1. 数据模型 1.1 概念数据模型 概念数据模型一般用 E-R 图表示&#xff0c;常用术语如下&#xff1a; 实体&#xff1a;客观存在的事物&#xff0c;如&#xff1a;一个单位、一个职工、一个部门、一个项目。属性&#xff1a;学生实体有学号、姓名、出生日期等属性。码&#…

oneplus6线刷、trwp、magisk(apatch)、LSPosed、Shamiko、Hide My Applist

oneplus6线刷android10.0.1 oneplus6线刷包(官方android10.0.1)下载、线刷教程&#xff1a; OnePlus6-brick-enchilada_22_K_52_210716_repack-HOS-10_0_11-zip 启用开发者模式 设置 / 连续点击6次版本号 : 启用开发者模式设置/开发者模式/{打开 usb调试, 打开 网络adb调试,…

ByteBuffer模拟拆包输出消息字符串

以下代码模拟网络编程中的粘包现象&#xff0c;用\n进行分割消息块 源码 public static void main(String[] args) {ByteBuffer byteBuffer1 ByteBuffer.allocate(60) ;byteBuffer1.put("Hello World\nWhat is you name?\nI am Licky!\nHo".getBytes());splice(byt…

成都睿明智科技有限公司怎么样可靠不?

在这个日新月异的数字时代&#xff0c;电商行业如同一股不可阻挡的洪流&#xff0c;席卷着每一个消费者的生活。而抖音&#xff0c;作为短视频与电商完美融合的典范&#xff0c;更是为无数商家开辟了一片全新的蓝海。在这片充满机遇与挑战的海洋中&#xff0c;成都睿明智科技有…