IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 初学Vue(全家桶)-第五天:条件渲染(v-if、v-else-if、v-else、v-show) -> 正文阅读

[JavaScript知识库]初学Vue(全家桶)-第五天:条件渲染(v-if、v-else-if、v-else、v-show)

初学Vue

1、v-show命令做条件渲染

当v-show的值为true时,就会显示元素文本区域中的内容,为false时就不会显示。如下:

  • 示例1:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="../../JS/vue.js"></script>
    <title>Document</title>
</head>
<body>
    <div id="root">
        <h2 v-show="false">欢迎您,{{name}}</h2>
    </div>
    <script>
        Vue.config.productionTip=false;
        const vm = new Vue({
            el:"#root",
            data:{
                name:"小明",
            },
        });
    </script>
</body>
</html>

而v-show等于号后面也可以写结果为布尔类型的表达式,例如:

  • 示例2
<body>
    <div id="root">
        <h2 v-show="1===3">欢迎您,{{name}}</h2>
    </div>
    <script>
        Vue.config.productionTip=false;
        const vm = new Vue({
            el:"#root",
            data:{
                name:"小明",
                
            },

        });
    </script>
</body>

浏览器查看源码可知,v-show命令的底层实现就是调整display,如下,使用了v-show将页面内容隐藏了,但页面中保存了节点
在这里插入图片描述

再看一个示例:

  • 示例3
<body>
    <div id="root">
        <button type="button" @click="n++">按我n+1</button>
        <h2 v-show="n==1">angular</h2>
        <h2 v-show="n==2">react</h2>
        <h2 v-show="n==3">Vue</h2>
    </div>
    <script>
        Vue.config.productionTip=false;
        const vm = new Vue({
            el:"#root",
            data:{
                n:0
            },
        });
    </script>
</body>

分析:每次点击按钮,n的值都会加1,n的值每次改变,都会导致模板重新解析,而在解析时,还是会从上往下依然进行n的值的判断。所以结果如下
请添加图片描述

总结:v-show适用于切换频率较高的场景,并且不展示的dom元素不会被移除,仅仅是使用样式(display:none)隐藏掉。

2、v-if命令做条件渲染

当v-if的值为true时,就会显示元素文本区域中的内容,为false时就不会显示。如下:

<body>
    <div id="root">
        <h2 v-if="1===3">欢迎您,{{name}}</h2>
    </div>
    <script>
        Vue.config.productionTip=false;
        const vm = new Vue({
            el:"#root",
            data:{
                name:"小明",
            },
        });
    </script>
</body>

与v-show不同的是,v-if除了隐藏文本内容时,同时会把对应的节点删除,因此不能通过document获取这个节点。从浏览器查看源码可以看到,如下
在这里插入图片描述

同样v-if也能实现v-show中示例3中的效果,那么这两者区别是什么呢,v-show适用于变化频率比较大的情况,因为不需要删除添加节点,而v-if就只适合与变化频率小的情况,因其频繁增删节点会影响性能。

3、v-else-if和v-else

v-else-if的逻辑和java中if…else的逻辑是一样的。要么结果时if中的内容,要么是else中的内容,而v-else就是对应if…else if…else的逻辑了,表示如果前面内容均不满足条件,那么结果就是else中的内容。具体演示如下:

<body>
    <div id="root">
        <button type="button" @click="n++">按我n+1</button>
        <h2 v-if="n==1">angular</h2>
        <h2 v-else-if="n==2">react</h2>
        <h2 v-else>Vue</h2>
    </div>
    <script>
        Vue.config.productionTip=false;
        const vm = new Vue({
            el:"#root",
            data:{
                n:0
            },
        });
    </script>
</body>

请添加图片描述
对比写三个v-if命令还是有逻辑区别的,每次n的值改变时,都会引起模板的重新解析,那么三个div元素就会从上往下依次被解析,对于写v-if,v-else-if,v-else,判断逻辑是,如果if中的内容满足,那么后面else if,和else中就不需要再进行判断了;而对于写三个v-if,则是每个if中都要进行判断。

证明:
同样的,按钮按一下,n的值加1

<button type="button" @click="n++">按我n+1</button>
        <h2 v-if="n==1">angular</h2>
        <h2 v-else-if="n==1">react</h2>
        <h2 v-else>Vue</h2>
        <!-- v-else后面的表达式可以省略-->

在这里插入图片描述

<button type="button" @click="n++">按我n+1</button>
        <h2 v-if="n==1">angular</h2>
        <h2 v-if="n==1">react</h2>
        <h2 v-if="n==3">Vue</h2>

在这里插入图片描述

补充-使用注意

  • 如果同时使用v-if、v-else-if时,那么v-if必须写在最前面,并且中间不能被其他元素打断
<body>
    <div id="root">
        <button type="button" @click="n++">按我n+1</button>
        <h2 v-if="n==1">angular</h2>
        <h2 v-else-if="n==2">react</h2>
        <h2>@</h2>
        <h2 v-else-if="n==3">Vue</h2>
        <h2 v-else>哈哈</h2>
    </div>
    <script>
        Vue.config.productionTip=false;
        const vm = new Vue({
            el:"#root",
            data:{
                n:0
            },
        });
    </script>
</body>

结果如下:

v-if和v-else-if之间必须连起来使用,如果中途被其他元素所打断,那么就会报如上的错误。这里就是被一个< h2 >@< /h2 >元素给中途打断了

  • v-if和template元素的配合使用(template不能和v-show配合使用)

当一个元素中包含多个元素时,如果同样再这个元素中添加v-if命令,而这样的dom的结构不是我们想要的。

<body>
    <div id="root">
        <button type="button" @click="n++">按我n+1</button>
        <div v-if="n === 1">
            <h2>angular</h2>
            <h2>react</h2>
            <h2>Vue</h2>
        </div>
    </div>
    <script>
        Vue.config.productionTip = false;
        const vm = new Vue({
            el: "#root",
            data: {
                n: 0
            },
        });
    </script>
</body>

在这里插入图片描述
通过template元素可以解决这样的问题,

<body>
    <div id="root">
        <button type="button" @click="n++">按我n+1</button>
        <template v-if="n === 1">
            <h2>angular</h2>
            <h2>react</h2>
            <h2>Vue</h2>
        </template>
    </div>
    <script>
        Vue.config.productionTip = false;
        const vm = new Vue({
            el: "#root",
            data: {
                n: 0
            },
        });
    </script>
</body>

在这里插入图片描述

  • v-if将节点删除了,所以不能通过document获取到含有v-if命令的节点。
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:03:56  更:2022-05-24 18:05:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:52:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码