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

Vue-条件渲染和循环渲染

文章目录

  • 条件渲染
  • 循环渲染


条件渲染

条件渲染指令是用来辅助开发者控制DOM的显示与隐藏。条件渲染指令有如下两个,分别是:
v-show和v-if
v-show和v-if的区别:
v-show是通过动态的为元素添加或移除display:none来进行显示与隐藏。如果需要频繁切换元素的显示状态,用v-show性能会更好。
v-if是通过动态的创建或移除元素来实现元素的显示和隐藏。如果不需要频繁切换元素的显示状态,用v-if性能会更好。
v-if配套的指令:
v-else-if 跟else if使用差不多
v-else 跟else使用差不多

    <script src='https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/2.6.14/vue.js'></script>
</head>
<style>
    .div1 {
        width: 200px;
        cursor: pointer;
    }
</style>
<body>
    <div class="myH">
        <div class="div1" @click="fn">
            <p>点我展示下拉框</p>
        </div>
        <div class="div1" v-show="flag">
            <p>下拉框一</p>
            <p>下拉框一</p>
        </div>
        <div class="div1" v-if="age<18">
            <span>
            未年人
            </span>
        </div>
        <div v-else-if="age>=18">
            <span>
                成年人
            </span>
        </div>
    </div>
    <script>
        var vue = new Vue({
            el: ".myH",
            data: {
                flag: false,
                age:22
            },
            methods: {
                fn() {
                    this.flag = !this.flag
                },
            }
        })
    </script>

请添加图片描述

循环渲染

1.v-for循环普通数组:v-for=“(em,index) in arr1”
2.v-for循环对象数组:v-for=“(em,index) in arr2”
3.v-for迭代对象:v-for=“(em, index) in arr3”
4.v-for迭代数字:v-for=“count in 10”

<style>
.div1{
    display: inline-block;
}
</style>

<body>
    <div class="myH">
        <!--v-for循环普通数组-->
        <div  v-for="(em, index) in arr1" :key="index" class="div1" style="background-color: royalblue;">
            <p>{{em}}</p>
        </div>

        <!--v-for循环对象数组-->
        <div  v-for="(em, index) in arr2" :key="index" class="div1" style="background-color: aqua;">
            <p>{{em.name}}
               {{em.age}}
               {{em.like}}
            </p>
        </div>

        <!-- v-for迭代对象 -->
        <div v-for="(em, index) in arr3" :key="index" class="div1" style="background-color: rgb(7, 146, 146);">
           {{em}}
        </div>

        <!--v-for迭代数字; in 后面我们放过数组、对象数组、对象,还可以放数字-->
        <!-- 如果使用v-for迭代数字的话,前面 count 的值从 1 开始-->
        <div style="background-color: rgb(185, 218, 218);">
         <p v-for="count in 10" class="div1">第{{count}}次</p>
        </div>
    </div>
    <script>
        var vue = new Vue({
            el: ".myH",
            data: {
                arr1: [5,4,3,2,1],
                arr2: [{name: "ljy",age: 21,like: "健身"}, 
                      {name: "jack",age: 11,like: "游泳"}, 
                      {name: "mary",age: 25,like: "爬山"}, 
                      {name: "Arali",age: 33,like: "美食"
                }],
                arr3:{
                    name: "jack", age: 11, like: "游泳"
                }
            },
        })
    </script>

在这里插入图片描述

v-for中key的意义
vue在刷新页面组件时,会把旧节点跟新vm节点做比较,如果要增加节点,并不会删除旧节点,而是复用;这样会导致节点跟数据没有绑定关系而重新渲染,用key可以将数据与节点绑定起来。

    <div id="app">
        <h1>活动:从10件商品中选择5件商品作为奖励</h1>
        <button type="button" @click="add">加载新的商品</button>
        <button>提交</button>
        <div>
            <div v-for=" (item,index) in arr" :key="item.id">
                <input type="checkbox" name="goods" />
                {{item.name}}
            </div>
        </div>
    </div>

    <script type="text/javascript">
        new Vue({
            el: "#app",
            data: {
                arr: [
                    { id: 10001, name: "商品1", },
                    { id: 10002, name: "商品2", },
                    { id: 10003, name: "商品3", },
                    { id: 10004, name: "商品4", }
                ],
                count: 5
            },
            methods: {
                add() {
                    //网络请求 然后把新商品添加到arr中
                    //假装网络请求了新数据	
                    var result = this.count++
                    this.arr.unshift({ id: result, name: "商品" + result})
                }
            }
        })
    </script>

在这里插入图片描述

for和if同一个标签bug:
当for和if放在了同一个标签中 没有先后顺序的要求,但是先执行for
渲染过程为:对arr每一项先做map循环判断v-if给出的条件,再做一遍for 循环渲染
这样引起的问题是:arr 数组新增一项数据时,会对每一项再做一遍v-if 循环,然后for 循环渲染

解决方案把for弄到最外层
如果if和for套在一层,数据容器发生变化时,if会重新判断一遍
嵌套的写法 数据容器变化时 if只判断新增的数据
这样当arr 数组某一项数据发生变化时,只对新增的数据进行v-if 判断,节约渲染效率

这样又会产生新的问题:外层for的div会也创建一个挂载到DOM中
解决方案:wx采用的是block元素 vue呢? template 其实就是dom操作中的fragment

相关文章:

  • 二、前端-VUE(2)
  • 在腾讯云服务器的Centos上从零开始部署并运行TinyWebServer服务器,过程记录(非常详细)
  • springboot系列(二十):如何通过redis实现手机号验证码功能 |超级详细,建议收藏
  • 原始套接字
  • 【C语言刷LeetCode】1953. 你可以工作的最大周数(M)
  • 猿创征文|Python基础——Visual Studio版本——Web开发
  • 【C语言刷LeetCode】395. 至少有 K 个重复字符的最长子串(M)
  • 利用 HomeAssistant 实现电脑远程开关机
  • 练习31-35:多表关联查询、多条件自连接查询、子查询、窗口函数等
  • windows下安装protocol buffer
  • Kubernetes 调度器学习
  • Android ADB常用命令
  • 基于51单片交通灯控制器_紧急+行人+总开关
  • Java 随笔 代理模式 1-spring aop
  • Kotlin(十一)Kotlin中的Object关键字
  • SegmentFault for Android 3.0 发布
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【技术性】Search知识
  • Angular 2 DI - IoC DI - 1
  • CentOS7简单部署NFS
  • JAVA_NIO系列——Channel和Buffer详解
  • JAVA并发编程--1.基础概念
  • Making An Indicator With Pure CSS
  • Median of Two Sorted Arrays
  • MySQL数据库运维之数据恢复
  • windows下如何用phpstorm同步测试服务器
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 机器学习中为什么要做归一化normalization
  • 基于游标的分页接口实现
  • 计算机在识别图像时“看到”了什么?
  • 人脸识别最新开发经验demo
  • 使用docker-compose进行多节点部署
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 推荐一个React的管理后台框架
  • 小程序开发之路(一)
  • 协程
  • 移动端解决方案学习记录
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • (Oracle)SQL优化技巧(一):分页查询
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (一)Linux+Windows下安装ffmpeg
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (原創) 未来三学期想要修的课 (日記)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • *1 计算机基础和操作系统基础及几大协议
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .form文件_一篇文章学会文件上传
  • .net mvc 获取url中controller和action
  • .Net 知识杂记
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET应用架构设计:原则、模式与实践 目录预览