springboot+vue全栈开发【3.前端篇之Vue基础语法2】

目录

  • 前言
  • Vue基础语法
    • 1.事件绑定指令
    • 2.条件渲染指令
      • v-show和v-if指令
      • v-else和v-else-if指令
    • 3.列表渲染指令
      • 扩展:v-for中的key

前言

hi,这个系列是我自学开发的笔记,适合具有一定编程基础(html、css那些基础知识要会!)的同学,有问题及时指正!

Vue基础语法

1.事件绑定指令

在 Vue.js 中,事件绑定是一种常用的技术,用于响应用户的交互动作,如点击、输入等。Vue 提供了 v-on 或 @ 语法糖来进行事件绑定。

例子:

<body>
    <div id="app">
        <h3>count的值为:{{count}}</h3>
        <button v-on:click="addCount">+1</button>
        <button @click="count+=1">+1</button>
    </div>

    <script>
        const vm = {
            data : function(){
                return {
                    count:0,
                }
            },
            methods:{
                addCount(){
                    this.count+=1
                }
            }    
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>
</body>

运行结果:
在这里插入图片描述

  • <button v-on:click="addCount">+1</button>这里使用了 v-on:click 指令来监听按钮的点击事件。当按钮被点击时,addCount 方法会被调用。addCount 方法会将 count 数据属性的值增加 1。
  • <button @click="count+=1">+1</button>这是 v-on 的语法糖,它提供了一个更简洁的 @click 表达式来进行事件绑定。与第一个按钮的效果相同,当这个按钮被点击时,count 数据属性的值会增加 1。

总结一下,这两个按钮都绑定了 click 事件,当它们被点击时,都会触发增加 count 数据属性的值的操作。第一个按钮使用了方法绑定,而第二个按钮直接在 @click 表达式中进行了操作,两者的效果都是相同的,都会使 count 值增加 1。
需要注意的是,直接在模板中修改数据属性(如第二个按钮中的 count+=1)并不是 Vue 推荐的做法。更好的方式是使用方法来修改数据,因为这样可以使代码更清晰。

PS.语法糖是什么意思?

“语法糖”是计算机科学中的一个术语,它指的是一种编程语言特性,它并不提供新的功能,而是提供了更简洁、更易于理解和使用的语法形式来执行常见的操作。这种语法形式并不影响底层的实现,它只是为了方便开发者。
在 Vue.js 中,@ 符号是 v-on: 的语法糖。它们的作用是完全相同的,都用于事件绑定。@click=“handler” 可以看作是 v-on:click=“handler” 的简化形式。

2.条件渲染指令

v-show和v-if指令

在 Vue.js 中,条件渲染指令用于根据表达式的真假来动态地显示或隐藏元素。Vue 提供了两个主要的条件渲染指令:v-if 和 v-show。

例子:

<body>
    <div id="app">
        <button @click="flag = !flag">Toggle flag</button>
        <p v-if="flag">请求成功====被v-if控制</p>
        <p v-show="flag">请求成功====被v-show控制</p>
    </div>

    <script>
        const vm = {
            data : function(){
                return {
                    flag:false,
                }
            }    
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>
</body>

运行结果:
在这里插入图片描述
在这里插入图片描述

  • <p v-if="flag">请求成功====被v-if控制</p> v-if 指令会根据 flag 数据属性的值来决定是否渲染该元素。当 flag 的值为 true 时,该 <p> 元素会被渲染到 DOM 中;当 flag 的值为 false 时,该 <p> 元素会从 DOM 中移除。
  • <p v-show="flag">请求成功====被v-show控制</p> v-show 指令也会根据 flag 数据属性的值来控制元素的显示和隐藏,但它是通过 CSS 的 display 属性来控制的。当 flag 的值为 true 时,该 <p> 元素会显示;当 flag 的值为 false 时,该 <p> 元素会隐藏,但它仍然存在于 DOM 中。
  • <button @click="flag = !flag">中的click绑定事件语句可以改变flag的赋值,所以点击按钮,会显示出下面的两个p元素,再次点击又会消失。

总结一下:

  • v-if 是“真正的”条件渲染,因为它确实会根据条件添加或删除元素。
  • v-show 只是简单地切换元素的 display CSS 属性,因此它对于频繁切换的元素比较适用,因为它不会像 v-if 那样在每次切换时都销毁和重建元素,这样可以有更好的性能表现。

在选择使用哪个指令时,通常的建议是:
如果元素需要频繁切换,使用 v-show。
如果元素在运行时不经常改变,或者在起始时就需要进行条件判断,使用 v-if。

v-else和v-else-if指令

在 Vue.js 中,除了 v-if 和 v-show 外,还提供了 v-else 和 v-else-if 指令来进一步控制条件渲染。这两个指令用于与 v-if 或 v-else-if 配合使用,根据前面指令的条件来决定是否渲染当前元素。

例子:

<body>
    <div id="app">
        <p v-if="num>0.5">随机数大于0.5</p>
        <p v-else>随机数小于等于0.5</p>
        <hr/>
        <p v-if="type === 'A'">distinction</p>
        <p v-else-if="type === 'B'">B</p>
        <p v-else>C</p>
    </div>

    <script>
        const vm = {
            data : function(){
                return {
                    num:Math.random(),
                    type:'A'
                }
            }    
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>
</body>

运行结果:
在这里插入图片描述

  • <p v-if="num>0.5">随机数大于0.5</p><p v-else>随机数小于等于0.5</p> 在这里,v-if 指令检查 num 是否大于 0.5。如果条件为 true,则渲染“随机数大于0.5”的 <p> 元素。如果条件为 false,则 v-else 指令会渲染“随机数小于等于0.5”的 <p> 元素
  • <p v-if="type === 'A'">distinction</p><p v-else-if="type === 'B'">B</p><p v-else>C</p>在这个例子中,根据 type 的值,我们有三个条件:如果 type 的值是 ‘A’,则渲染“distinction”的 <p> 元素。如果 type 的值是 ‘B’,则渲染“B”的 <p> 元素。如果以上条件都不满足,v-else 指令会渲染“C”的 <p> 元素

总结一下:

  • v-else 用于在 v-if 指令之后渲染一个元素。它必须紧跟在一个 v-if 或 v-else-if 指令之后,并且在同一个元素上。
  • v-else-if 用于在 v-if 或 v-else-if 之后添加一个额外的条件块。它必须紧跟在 v-if 或另一个 v-else-if 指令之后,并且在同一个元素上。

3.列表渲染指令

在 Vue.js 中,v-for 指令用于循环渲染一个数组或对象的每一项。这个指令提供了一种简单的方式来遍历数据集合并渲染每一项为 DOM 元素。

例子:

<body>
    <div id="app">
        <ul>
            <li v-for="(user,i) in userList">索引是:{{i}}, 姓名是{{user.name}}</li>
        </ul>
    </div>
    
    <script>
        const vm = {
            data : function(){
                return {
                    userList:[
                        {id:1,name:'za'},
                        {id:2,name:'san'},
                        {id:3,name:'wang'},
                    ]
                }
            }    
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>
</body>

运行结果:
在这里插入图片描述

  • v-for 指令遍历 userList 数组,并为数组中的每个元素生成一个 <li> 元素。在循环的过程中,我们可以使用括号内的表达式为每个元素指定一个别名和一个索引。
  • (user, i) in userList:这个表达式将 userList 数组中的每个对象解构为 user(当前对象)和 i(当前索引)。
  • 因此这段代码渲染结果会是
<ul>
    <li>索引是:0, 姓名是za</li>
    <li>索引是:1, 姓名是san</li>
    <li>索引是:2, 姓名是wang</li>
</ul>

v-for 指令不仅仅限于数组,它也可以遍历对象的属性。此外,还可以使用 v-for 指令的其他特性,如提供一个可选的第二个参数作为键(key)值,或使用 of 关键字代替 in。但在大多数情况下,上述的基础用法就足够满足需求了。

扩展:v-for中的key

在 Vue.js 中,key 是 v-for 指令的一个重要属性,用于指定每个列表项的唯一标识符。这个标识符是为了帮助 Vue 识别列表中的每一项,从而有效地管理列表项的状态和重新渲染。
当 Vue 重新渲染列表时,它会根据 key 的值来确定哪些元素是新增的、哪些元素是被删除的、以及哪些元素是被重新排序的。如果没有提供 key,Vue 可能会使用元素的索引作为默认的 key,但在某些情况下,这样可能会导致不必要的性能问题和渲染错误。

例子:

<body>
    <div id="app">
        <div>
            <input type="text" v-model="name">
            <input type="text" :value="name">
            <button @click="addUser">添加</button>
        </div>
        <ul>
            <li v-for="(user,i) in userList" :key="user.id">
                <input type="checkbox" />
                姓名:{{user.name}}
            </li>
        </ul>

    </div>

    <script>
        const vm = {
            data : function(){
                return {
                    userList:[
                        {id:1,name:'za'},
                        {id:2,name:'san'},
                        {id:3,name:'wang'},
                    ],
                    name:'',
                    nextID:4,

                }
            },
            methods:{
                addUser(){
                    this.userList.unshift({ id: this.nextID, name: this.name});
                    this.name='';
                    this.nextID++;
                }
            }    
        }
        const app = Vue.createApp(vm)
        app.mount('#app')
    </script>
</body>

运行结果:
在这里插入图片描述

  • <li v-for="(user, i) in userList" :key="user.id"> 每个 user 对象都有一个唯一的 id 属性,我们使用这个 id 属性作为 key。这样,当列表项被添加、删除或重新排序时,Vue 可以根据 id 属性准确地识别每个列表项。
  • <input type="text" v-model="name"> v-model 是 Vue.js 提供的一个双向数据绑定指令。它在表单输入元素上创建了一个双向绑定。当输入框的值发生变化时,name 数据属性也会自动更新。同样地,当 name 数据属性的值改变时,输入框的值也会自动更新。
  • <input type="text" :value="name"> :value 是 Vue.js 的一个绑定属性语法,它用于单向数据绑定。它将 name 数据属性的值绑定到输入框的 value 属性。这意味着当 name 数据属性的值改变时,输入框的 value 属性会更新,但不会反过来影响 name 数据属性。这是一个单向的数据流,只能从数据属性流向视图

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

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

相关文章

MAC安装CocoaPods遇到的错误Failed to build gem native extension.

MAC安装CocoaPods遇到的错误Failed to build gem native extension. 配置flutter环境的时候报错cocoapods不可用 发现已经安装了CocoaPods&#xff0c;但是不能用 重新安装CocaPods sudo gem install cocoapods重新安装报错如下&#xff1a; 安装RVM curl -L https://get.r…

HBase的数据模型与架构

官方文档&#xff1a;Apache HBase – Apache HBase™ Homehttps://hbase.apache.org/ 一、HBase概述 1.概述 HBase的技术源自Google的BigTable论文&#xff0c;HBase建立在Hadoop之上&#xff0c;是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统&#xff0c;用于…

10. Spring MVC 程序开发

本文源码位置: Spring-MVC 1. Spring MVC 概要 摘自Spring官方&#xff1a; Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes …

Redis的Stream 和 实现队列的方式【List、SortedSet、发布订阅、Stream、Java】

Redis队列与Stream、Redis 6多线程详解 Redis队列与StreamStream总述常用操作命令生产端消费端单消费者消费组消息消费 Redis队列几种实现的总结基于List的 LPUSHBRPOP 的实现基于Sorted-Set的实现PUB/SUB&#xff0c;订阅/发布模式基于Stream类型的实现与Java的集成 消息队列问…

权限管理Ranger详解

文章目录 一、Ranger概述与安装1、Ranger概述1.1 Ranger介绍1.2 Ranger的目标1.3 Ranger支持的框架1.4 Ranger的架构1.5 Ranger的工作原理 2、Ranger安装2.1 创建系统用户和Kerberos主体2.2 数据库环境准备2.3 安装RangerAdmin2.4 启动RangerAdmin 二、Ranger简单使用1、安装 R…

使用代理IP实现Python爬虫中的随机IP请求

目录 前言 一、什么是代理IP&#xff1f; 二、 随机IP请求的实现步骤 1. 获取代理IP列表 2. 随机选择代理IP 3. 发送请求 4. 处理响应 总结 前言 在网络爬虫中&#xff0c;使用代理IP是一种常见的技术手段&#xff0c;它可以帮助我们隐藏真实IP地址&#xff0c;提高爬取…

python生成二维码

要在Python中生成二维码&#xff0c;可以使用第三方库qrcode。首先&#xff0c;确保已经安装了qrcode库&#xff1a; pip install qrcode然后&#xff0c;使用以下代码生成二维码&#xff1a; import qrcodedata "https://mp.csdn.net/mp_blog/creation/editor?spm100…

static+单例模式+类的复合继承

汇编语言 汇编语言是最靠谱的验证“编程语言相关知识点”正确性的方式 汇编语言与机器语言一一对应&#xff0c;每一条机器语言都有与之对应的汇编指令 机器语言是计算机使用的语言&#xff0c;它是一串二进制数字 汇编语言可以通过汇编得到机器语言机器语言可以通过反汇编得到…

LoRA:大模型的低阶自适用(使用BERT在IMDB数据集上运用LoRA微调)

文章目录 简介LoRA文章主要贡献LoRA技术模型图技术细节论文实验结果LoRA在bert的运用LoRA核心代码实战分析 简介 论文链接https://arxiv.org/pdf/2106.09685v2.pdf 本文将先介绍论文中的LoRA技术&#xff0c;然后以BERT为例在IMDB数据集上代码实现运用这项微调技术。 代码数…

Day 14 网络协议

常见网络设备&#xff1a;交换机 路由器 中继器 多协议网关&#xff08;路由器的前身&#xff09; 交换机&#xff1a;用于连接统一网络的设备&#xff0c;实现内网设备通信。 从广义上分为&#xff1a;局域网交换机&#xff0c;广域网交换机 从网络构成分为&#xff1a;接…

Prompt提示工程上手指南:基础原理及实践-思维树 (ToT)策略下的Prompt

前言 此篇文章已经是本系列的第五篇文章&#xff0c;之前我们已经将检索增强生成(RAG)策略&#xff0c;逐渐我们掌握的知识和技术都在不断提高&#xff0c;对于Prompt的技巧策略也不能只局限于局部运用而要适应LLM大模型的整体框架去进行改进休整。较为主流的LLM模型框架设计基…

通过adb 命令打印安装在第三方模拟器上的log

1&#xff0c;环境&#xff1a;Windows 11 &#xff0c;第三方模拟器 网易的MuMu 步骤&#xff1a; 1&#xff0c;打开cmd&#xff0c;输入 adb connect 172.0.0.1:7555 2&#xff0c;在cmd&#xff0c;再次输入adb logcat 回车

【Web】陇原战“疫“2021网络安全大赛 题解

目录 CheckIN eaaasyphp EasyJaba CheckIN 拿到附件&#xff0c;贴出关键代码 func getController(c *gin.Context) {cmd : exec.Command("/bin/wget", c.QueryArray("argv")[1:]...)err : cmd.Run()if err ! nil {fmt.Println("error: ", …

【HCIP】OSPF的高级特性

OSPF的高级特性1 --- 不规则区域 一、OSPF不规则区域类型 产生原因&#xff1a;区域划分不合理&#xff0c;导致的问题 1、非骨干区域无法和骨干区域保持连通 2、骨干区域被分割 造成后果&#xff1a;非骨干区域没和骨干区域相连&#xff0c;导致ABR将不会帮忙转发区域间的路由…

element-ui设置弹窗等级最高

通过参数:appendToBody"true"设置弹窗等级最高 主要是 :appendToBody“true”&#xff0c;其他参数可根据自己需求配置 <el-dialog :title"title" :visible.sync"isShow" top"5vh" :appendToBody"true"><el-image…

Web前端开发——Ajax,Axios概述及在Vue框架中的使用

前言&#xff1a; 整理下学习笔记&#xff0c;打好基础&#xff0c;daydayup!!! Ajax Ajax是什么&#xff1f; Ajax全称Asynchromous JavaScript And Xml&#xff0c;是异步的JavaScript和Xml。 Ajax的作用&#xff1f; 1&#xff0c;数据交换&#xff1a;通过Ajax可以给服务器…

uniapp 当前系统没有安装苹果根证书,是否打开证书目录(打开后依次安装证书

当你遇到这类问题时&#xff0c;说明你也极其的困惑&#xff01;这就是为啥大抵国内这些货色搞的东西总是不尽人意&#xff01;连开发者生态都搞不好&#xff0c;就急着吹嘘。 这是官方给的技术说明方案&#xff1a; 恭喜你&#xff0c;当你按照这个搞之后&#xff0c;你的问题…

Map与Set的模拟实现封装

目录 一. 底层原理 二. 红黑树节点的定义 三. 仿函数封装 四. 基本函数的封装 五. 迭代器的封装 5.1 迭代器的基本定义 5.2 *与->操作 5.3 迭代器的操作 5.3.1 右子树不为空 5.3.2 右子树为空 5.4 迭代器的--操作 5.4.1 当前节点的父节点…

CSS基础:最详细 padding的 4 种用法解析

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃&#xff0c;大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 We…

Adobe Premiere Pro将加入AI生成式功能,以提高视频编辑的效率;OpenAI宣布在东京设立亚洲首个办事处

&#x1f989; AI新闻 &#x1f680; Adobe Premiere Pro将加入AI生成式功能&#xff0c;以提高视频编辑的效率 摘要&#xff1a;Adobe宣布&#xff0c;将为Premiere Pro引入由生成式AI驱动的新功能&#xff0c;以提高视频编辑的效率。这些功能包括“生成扩展”&#xff0c;能…