当前位置: 首页 > article >正文

Vue学习笔记(三)

在这里插入图片描述

条件渲染

Vue中,提供了条件渲染,这类似于JavaScript中的条件语句。

  1. v-if
  2. v-else
  3. v-else-if
  4. v-show

v-if

v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 true 值的时候被渲染。

<script>
    export default {
        data() {
            return {
                flag: true
            }
        }
    }
</script>

<template>
    <h3>条件渲染</h3>
    <div v-if="flag">你能看见我吗</div>
</template>

v-else

你可以使用 v-else 指令来表示 v-if 的“else 块”

<script>
    export default {
        data() {
            return {
                flag: false
            }
        }
    }
</script>

<template>
    <h3>条件渲染</h3>
    <div v-if="flag">你能看见我吗</div>
    <div v-else>那你还是看看我吧!</div>
</template>

v-else-if

顾名思义,v-else-if提供的是相应于v-if的else if 区块。它可以连续多次重复使用

<script>
    export default {
        data() {
            return {
                flag: false,
                type: "D",
            }
        }
    }
</script>

<template>
    <h3>条件渲染</h3>
    <div v-if="flag">你能看见我吗</div>
    <div v-else>那你还是看看我吧!</div>
    <div v-if="type==='A'">A</div>
    <div v-else-if="type==='B'">B</div>
    <div v-else-if="type==='C'">C</div>
    <div v-else>Not A/B/C</div>
</template>

v-show

另一个用于条件性展示元素的选项是 v-show 指令

<script>
    export default {
        data() {
            return {
                flag: true,
                type: "D",
            }
        }
    }
</script>

<template>
    <h3>条件渲染</h3>
    <div v-if="flag">你能看见我吗</div>
    <div v-else>那你还是看看我吧!</div>
    <div v-if="type==='A'">A</div>
    <div v-else-if="type==='B'">B</div>
    <div v-else-if="type==='C'">C</div>
    <div v-else>Not A/B/C</div>
    <div v-show="flag">你可以看看我吗?</div>
</template>

v-if vs v-show 的区别

v-if 是“真正”的条件渲染,因为它会确保在切换过程中,条件块内的事件监听器和子组件适当地被销毁和重建。

v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。

相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。

一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好

列表渲染

我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名

<script>
    export default {
        data() {
            return{
                names: ["潘家辉","大佬","真强","!"]
            }
        }
    }
</script>

<template>
    <h3>列表渲染</h3>
    <p v-for="item in names">{{ item }}</p>
</template>

复杂数据

大多数情况下,我们渲染的数据源来于网络请求,也就是JSON格式。

<script>
    export default {
        data() {
            return{
                names: ["潘家辉","大佬","真强","!"],
                result: [{
                    "id": 2261677,
                    "name": "我不是药神",
                    "score": 9.7,
                    "release_date": "2018-07-05",
                    "cover_url": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2561305377.jpg"
                }, {
                    "id": 26752088,
                    "name": "疯狂动物城",
                    "score": 9.2,
                    "release_date": "2016-03-04",
                    "cover_url": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2315672647.jpg"
                }, {
                    "id": 1295644,
                    "name": "阿甘正传",
                    "score": 9.4,
                    "release_date": "1994-06-23",
                    "cover_url": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p510876377.jpg"
                }],
            }
        }
    }
</script>

<template>
    <h3>列表渲染</h3>
    <p v-for="item in names">{{ item }}</p>
    <div v-for="item in result">
        <p>{{ item.name }}</p>
        <p>{{ item.score }}</p>
        <p>{{ item.release_date }}</p>
        <img :src="item.cover_url" alt="tu">
    </div>
</template>

v-for也支持使用可选的第二个参数表示当前项的位置索引

<p v-for="(item,index) in names">{{ item }}-{{ index }}</p>

也可以使用of作为分隔符来替代in,这更接近JavaScript的迭代器语法

<p v-for="(item,index) of names">{{ item }}-{{ index }}</p>

v-for与对象

也可以使用v-for来遍历一个对象的所有属性。

userInfo: {
            name: "潘家辉",
            age: 18,
            sex: "男"
          }
<div>
  <p v-for="(value,key,index) of userInfo">{{ value }}-{{ key }}-{{ index }}</p>
</div>

运行截图

20241025122819

补充-通过key管理状态

当 Vue 正在更新使用 v-for 渲染的元素列表时,它默认使用“就地更新”的策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序,而是就地更新每个元素,并且确保它们在每个索引位置正确渲染。

为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一的 key attribute:

<script>
    export default {
        data(){
            return{
                names: ['Alice', 'Bob', 'Cathy']
            }
        }
    }
</script>

<template>
    <h3>Key属性添加到v-for</h3>
    <p v-for="(item,index) in names" :key="index">{{ item }}</p>
</template>

温馨提示

  1. key在这里是通过一个v-bind绑定的特殊attribute。
  2. 推荐在任何可行的时候为v-for提供一个keyattribute。
  3. key绑定的值期望是一个基础类型的值,例如字符串或number类型。

key的来源

不要使用index作为key的值,我们要确保每一条数据的唯一索引不会发生变化。
一般使用数据库的唯一id


http://www.kler.cn/news/364656.html

相关文章:

  • C++对象模型:关于对象
  • 接口测试(九)jmeter——关联(JSON提取器)
  • 空间音频技术
  • leetcode day4 409+5
  • ASP.NET Core 8.0 中使用 Hangfire 调度 API
  • STM32之OLED驱动函数
  • HarmonyOS第一课——HarmonyOS介绍
  • 云+AI 时代的 OceanBase
  • 雷池社区版有多个防护站点监听在同一个端口上,匹配顺序是怎么样的
  • CTFHUB技能树之XSS——过滤关键词
  • 11544 吃东西
  • 扫雷游戏的分析、设计与代码实现详解
  • 2024香港云服务器推荐选择的5大商家整理(top5)
  • LeetCode 344.反转字符串
  • 书生营L0G3000 Git 基础知识
  • 深入拆解TomcatJetty——Tomcat生命周期与多层容器
  • html如何实现跳转到锚点
  • 渗透测试导学
  • HTML 与 CSS 演绎敲击键盘的灵动之手
  • 15分钟学 Go 第 10 天:函数参数和返回值
  • Genmo 的 Mochi1 AI 视频生成技术:内容创作的新纪元
  • 从SQL到NoSQL:数据库类型及应用场景
  • Vert.x学习笔记
  • Eclipse中继承自Collection<Object>的示例
  • 【三十七】【QT开发应用】使用QVideoWidget播放视频,QT模块缺失时更新安装模块步骤(利用虚拟网址打开应用加速)
  • 架构师考试系列(6)论文专题:论分布式架构设计