Vue核心基础4:绑定样式、条件渲染、列表渲染

news2025/1/26 14:11:21

1 绑定样式

【代码】

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>绑定样式</title>
    <script src="../js/vue.js"></script>
    <style>
        .basic {
            width: 200px;
            height: 100px;
            background-color: pink;
        }

        .normal {
            background-color: skyblue;
            font-size: larger;
            border: 1px solid black;
        }

        .sad {
            border-radius: 10px;
        }
    </style>
</head>

<body>
    <div id="root">
        <!-- 1.绑定class样式---字符串写法, 适用于样式的类名不确定,需要动态指定 -->
        <div class="basic" :class="mood" @click="changeMethod">test</div> <br>

        <!-- 2.绑定class样式---数组写法, 适用于要绑定的样式个数不确定、名字也不确定 -->
        <div class="basic" :class="classArr">test11</div> <br>
        
        <!-- 3.绑定class样式---对象写法, 适用于要绑定的样式个数确定、名字也确定,但要动态决定用不用 -->
        <div class="basic" :class="classObj" @click="changeMethod">test</div><br>

        <!-- 4.绑定内联样式 style -->
        <!-- 对象形式并写成小驼峰的形式 -->
        <div class="basic" :style="{fontSize: fs + 'px', color: 'red'}">{{name}}</div>

        <!-- 数组写法,数组里面可以加多个样式对象 -->
        <div class="basic" :style="[classObj1, classObj2]">{{name}}</div>

        <script>
            const x = new Vue({
                el: '#root',
                data: {
                    name: 'Vue',
                    mood: 'normal',
                    classArr: ['normal', 'sad'],
                    classObj: {
                        normal: false,
                        sad: false
                    },
                    fs: 30,
                    classObj1: {
                        fontSize: '30px',
                        color: 'red'
                    },
                    classObj2: {
                        backgroundColor: 'orange'
                    }

                },
                methods: {
                    changeMethod() {
                        const arr = ['normal', 'sad']
                        const index = Math.floor(Math.random() * 2)
                        this.mood = arr[index]
                    }
                },
            })
        </script>
</body>

</html>

2 条件渲染

【代码】

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>条件渲染</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <!-- 1.使用v-show作条件渲染 true或false -->
        <h1 v-show="true">hello {{name}}</h1>

        <!-- 2.使用 v-if 作条件渲染 -->
        <h1 v-if="true">hello {{name}}</h1>

        <!-- 3.使用 v-else  v-else-if作条件渲染, 连续使用的话,必须写在一起,不能被其它标签打断-->
        <h1 v-if="n === 1">hello {{name}}</h1>
        <h1 v-else-if="n === 2">hello222 {{name}}</h1>
        <h1 v-else>bye {{name}}</h1>

        <!-- 想要某个条件成立时,下面全部显示出来,之前用div会破坏代码结构, 现在可以用template , 不会破坏结构-->
        <!-- template只能配合 v-if使用,不能配合v-show使用 -->
        <template v-if="n === 1">
            <h2>你好</h2>
            <h2>hello</h2>
            <h2>say</h2>
            <h2>bye</h2>
        </template>

    </div>
    <script>
        const x = new Vue({
            el: '#root',
            data: {
                name: 'Vue',
                url: 'http://www.baidu.com',
                n: 1
            }
        })
    </script>
</body>

</html>

3 列表渲染

【代码】

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>列表渲染</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="root">
        <ul>
            <!-- 对于Vue2而言  in  of   都可以 -->

            <!-- 1.遍历数组 -->
            <li v-for="p in persons" :key="p.id">姓名:{{p.name}} ---- 年龄:{{p.age}}</li>


            <!-- <li v-for="(p,index) in persons" :key="index">姓名:{{p.name}} ---- 年龄:{{p.age}}</li> -->

            <!-- 2.遍历对象 -->
            <h2>汽车信息</h2>
            <li v-for="(value, key) in car" :key="key">
                {{key}}: {{value}}
            </li>

            <!-- 3.遍历字符串 -->
            <h2>遍历字符串</h2>
            <li v-for="(char,index) of name" :key="index">{{index}}-{{char}}</li>


            <!-- 4.遍历指定次数 -->
            <h2>遍历指定次数</h2>
            <li v-for="(number,index) of 5" :key="index">{{index}}-{{number}}</li>

        </ul>
    </div>
    <script>
        const x = new Vue({
            el: '#root',
            data: {
                name: 'Vue',
                persons: [
                    { id: '001', name: '张三', age: 18 },
                    { id: '002', name: '李四', age: 19 },
                    { id: '003', name: '王五', age: 20 }

                ],
                car: {
                    name: '奔驰',
                    price: '40万',
                    color: '黑色'
                }
            }
        })
    </script>
</body>

</html>

 

3.1 v-for 中 key 的作用

分析:因为以索引号作为key, 所以首先是找到相同的key进行比对,如果标签内容不相同,则用新的替换旧的。因为比对的是虚拟DOM, 所以不管input中有没有内容,都是一样的。所以在比对的时候,会复用原来的input。这里就会出现问题了


这里用id 作为key 就不会由上述index作为key 的问题

3.2 列表过滤

方法1:可以用watch属性实现

    <div id="root">
        <ul>
            <h2>人员列表 (列表过滤)</h2>
            <input type="text" placeholder="请输入..." v-model="keyWord"><br><br>
            <!-- 1.遍历数组 -->
            <li v-for="p in filterPersons" :key="p.id">姓名:{{p.name}} ---- 年龄:{{p.age}} ---- 性别:{{p.sex}}</li>

        </ul>
    </div>
                const x = new Vue({
                    el: '#root',
                    data: {
                        name: 'Vue',
                        keyWord: '',
                        persons: [
                            { id: '001', name: '张三', age: 18, sex: '男' },
                            { id: '002', name: '张杰', age: 19, sex: '男' },
                            { id: '003', name: '张韶涵', age: 20, sex: '女' },
                            { id: '004', name: '章若楠', age: 21, sex: '女' },
                            { id: '005', name: '周杰伦', age: 22, sex: '男' }
                        ],
                        filterPersons: []
                    },
                    watch: {
                        keyWord: {
                            immediate: true,
                            // indexOf  字符串中是否包含某个字符
                            handler(val) {
                                this.filterPersons = this.persons.filter(p => p.name.indexOf(val) !== -1)
                            }
                        }
                    }

方法2:使用computed属性实现

        const x = new Vue({
            el: '#root',
            data: {
                name: 'Vue',
                keyWord: '',
                persons: [
                    { id: '001', name: '张三', age: 18, sex: '男' },
                    { id: '002', name: '张杰', age: 19, sex: '男' },
                    { id: '003', name: '张韶涵', age: 20, sex: '女' },
                    { id: '004', name: '章若楠', age: 21, sex: '女' },
                    { id: '005', name: '周杰伦', age: 22, sex: '男' }
                ]
            },
            computed: {
                filterPersons() {
                    return this.persons.filter(p => p.name.indexOf(this.keyWord) !== -1)
                }
            }
        })

3.3 列表排序

【代码】

<body>
    <div id="root">
        <ul>
            <!-- 对于Vue2而言  in  of   都可以 -->
            <h2>人员列表 (列表排序)</h2>
            <input type="text" placeholder="请输入..." v-model="keyWord">
            <button @click="sortType = 1">升序</button>
            <button @click="sortType = 2">降序</button>
            <button @click="sortType = 0">原顺序</button>
            <br><br>
            <!-- 1.遍历数组 -->
            <li v-for="p in filterPersons" :key="p.id">姓名:{{p.name}} ---- 年龄:{{p.age}} ---- 性别:{{p.sex}}</li>

        </ul>
    </div>
    <script>
        //    用computed属性实现
        const x = new Vue({
            el: '#root',
            data: {
                name: 'Vue',
                keyWord: '',
                sortType: 0, //0原顺序,1升序,2降序
                persons: [
                    { id: '001', name: '张三', age: 30, sex: '男' },
                    { id: '002', name: '张杰', age: 19, sex: '男' },
                    { id: '003', name: '张韶涵', age: 45, sex: '女' },
                    { id: '004', name: '章若楠', age: 21, sex: '女' },
                    { id: '005', name: '周杰伦', age: 22, sex: '男' }
                ]
            },
            computed: {
                filterPersons() {
                    const arr = this.persons.filter(p => p.name.indexOf(this.keyWord) !== -1)

                    // 判断是否需要排序
                    if (this.sortType) {
                        arr.sort((p1, p2) => {
                            return this.sortType === 1 ? p1.age - p2.age : p2.age - p1.age
                        })
                    }
                    return arr
                }
            }
        })

    </script>
</body>

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

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

相关文章

机器学习9-随机森林

随机森林&#xff08;Random Forest&#xff09;是一种集成学习方法&#xff0c;用于改善单一决策树的性能&#xff0c;通过在数据集上构建多个决策树并组合它们的预测结果。它属于一种被称为“集成学习”或“集成学习器”的机器学习范畴。 以下是随机森林的主要特点和原理&…

3分钟部署完成Docker Registry及可视化管理工具Docker-UI

安装docker-registry 由于镜像文件会非常占用空间&#xff0c;因此需要选择一个磁盘充裕的位置来存放镜像数据。 这里设置为&#xff1a;-v /data/registry:/var/lib/registry&#xff0c;其中/data/registry是宿主机存放数据的位置。 docker run -d -p 5000:5000 --restart…

【EAI 019】Eureka: Human-Level Reward Design via Coding LLM

论文标题&#xff1a;Eureka: Human-Level Reward Design via Coding Large Language Models 论文作者&#xff1a;Yecheng Jason Ma, William Liang, Guanzhi Wang, De-An Huang, Osbert Bastani, Dinesh Jayaraman, Yuke Zhu, Linxi Fan, Anima Anandkumar 作者单位&#xff…

《Linux 简易速速上手小册》第10章: 性能监控与优化(2024 最新版)

文章目录 10.1 理解系统负载10.1.1 重点基础知识10.1.2 重点案例&#xff1a;服务器响应变慢10.1.3 拓展案例 1&#xff1a;多核 CPU 系统的负载解读10.1.4 拓展案例 2&#xff1a;分析具体时间段的系统负载 10.2 优化性能10.2.1 重点基础知识10.2.2 重点案例&#xff1a;优化 …

【JVM篇】ThreadLocal中为什么要使用弱引用

文章目录 &#x1f354;ThreadLocal中为什么要使用弱引用⭐总结 &#x1f354;ThreadLocal中为什么要使用弱引用 ThreadLocal可以在线程中存放线程的本地变量&#xff0c;保证数据的线程安全 ThreadLocal是这样子保存对象的&#xff1a; 在每个线程中&#xff0c;存放了一个…

MATLAB Coder从入门到放弃

一、MATLAB Coder入门 1 MATLAB Coder是什么 从 MATLAB 代码生成 C 和 C 代码 MATLAB Coder™ 可从 MATLAB 代码生成适用于各种硬件平台&#xff08;从桌面计算机系统到嵌入式硬件&#xff09;的 C 和 C 代码。它支持大多数 MATLAB 语言和广泛的工具箱。您可以将生成的代码作…

无人机概述及系统组成,无人机系统的构成

无人机的定义 无人驾驶航空器&#xff0c;是一架由遥控站管理&#xff08;包括远程操纵或自主飞行&#xff09;的航空器&#xff0c;也称遥控驾驶航空器&#xff0c;以下简称无人机。 无人机系统的定义 无人机系统&#xff0c;也称无人驾驶航空器系统&#xff0c;是指一架无人…

第 384 场 LeetCode 周赛题解

A 修改矩阵 模拟 class Solution { public:vector<vector<int>> modifiedMatrix(vector<vector<int>> &matrix) {int m matrix.size(), n matrix[0].size();vector<int> mx(n, INT32_MIN);for (int i 0; i < m; i)for (int j 0; j &l…

Java学习-常用API-新增时间

1.学习JDK8新增时间的原因&#xff1f; 2.JDK8新增了那些时间&#xff1f; 代替calendar的 localDate localTime localDateTime 常用APi及代码示例&#xff1a; ZoneIdZonedDateTime 常用方法 代码示例&#xff1a; 代替Date的 Instant常见方法及其代码示例&#xff1a; 注…

[CUDA 学习笔记] Reduce 算子优化

Reduce 算子优化 注: 本文主要是对文章 【BBuf的CUDA笔记】三&#xff0c;reduce优化入门学习笔记 - 知乎 的学习整理 Reduce 又称之为归约, 即根据数组中的每个元素得到一个输出值, 常见的包括求和(sum)、取最大值(max)、取最小值(min)等. 前言 本文同样按照英伟达官方 PP…

MOCO动量编码

参考&#xff0c;推荐阅读 李沐论文精读系列三&#xff1a;MoCo、对比学习综述&#xff08;MoCov1/v2/v3、SimCLR v1/v2、DINO等&#xff09;_moco 对比学习-CSDN博客 背景 1. MOCO CVPR 2020 2. 对比学习&#xff1a;无监督学习的一种&#xff0c;重点学习同类实例中的共同…

人脸追踪案例及机器学习认识

1.人脸追踪机器人初制 用程序控制舵机运动的方法与机械臂项目完全相同。 由于摄像头的安装方式为上下倒转安装&#xff0c;我们在编写程序读取图像时需使用 flip 函数将 图像上下翻转。 现在&#xff0c;只需要使用哈尔特征检测得到人脸在图像中的位置&#xff0c;再指示舵机运…

BIO、NIO、Netty演化总结

关于BIO&#xff08;关于Java NIO的的思考-CSDN博客&#xff09;和NIO&#xff08;关于Java NIO的的思考-CSDN博客&#xff09;在之前的博客里面已经有详细的讲解&#xff0c;这里再总结一下最近学习netty源码的的心得体会 在之前的NIO博客中我们知道接受客户端连接和IO事件的…

Java编程练习之类的继承

1.创建银行卡类&#xff0c;并分别设计两个储蓄卡和信用卡子类。 import javax.swing.plaf.BorderUIResource;import java.util.Scanner;class Card {int Id; //银行卡&#xff1b;int password; //密码&#xff1b;double balance2000; //账户存款金额&#xff1b;String A…

论文介绍 FreeControl: 无需额外训练实现文本到图像的空间操控!

论文介绍 FreeControl: 无需额外训练实现文本到图像的空间操控&#xff01; 论文介绍 FreeControl: Training-Free Spatial Control of Any Text-to-Image Diffusion Model with Any Condition 关注微信公众号: DeepGo 项目地址&#xff1a;https://genforce.github.io/freeco…

进程间通信[二]

命名管道 mkfifo filename 创建管道 共享内存 systemV 就是一段内存映射到两个进程之中&#xff0c;这段内存就是双方都可以看到同一块公共空间&#xff0c;变具备了进程间通信的前提条件。把映射去掉&#xff0c;然后释放空间&#xff0c;这就是释放共享内存。 共享内存…

实现安全性

实现安全性 问题陈述 Chris希望阅读位于服务器上的电子邮件消息。他将自己的登录信息发送到服务器已进行验证。因此,Chris决定用基于表单的验证来验证他的登录信息。但是,他首先决定只用基于表单的验证测试登录页面 。 解决方案 要解决上述问题,Chris需要执行以下任务: 用…

Github 2024-02-07 开源项目日报 Top9

根据Github Trendings的统计&#xff0c;今日(2024-02-07统计)共有9个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Rust项目2TypeScript项目2Python项目2Ruby项目1HTML项目1NASL项目1Go项目1C项目1Svelte项目1C项目1 React Nat…

2024年2月5日-2月11日周报

论文阅读 1. 本周计划2. 完成情况2.1 论文摘要2.2 网络结构2.3 损失函数2.4 优化器2.5 代码2.5.1 代码结果2.5.2 代码大致流程 4. 总结及收获4. 下周计划 1. 本周计划 阅读论文《Data-Driven Seismic Waveform Inversion: A Study on the Robustness and Generalization》并实…

【MATLAB】GA_BP神经网络回归预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 GA_BP神经网络回归预测算法结合了遗传算法&#xff08;Genetic Algorithm, GA&#xff09;和BP神经网络&#xff08;Backpropagation Neural Network, BPNN&#xff09;&#xff0c;用于解…