v-show 与 v-if:区别介绍与案例深度分析

目录

v-show、v-if区别

v-if、v-else、v-else-if 


v-show、v-if区别


        v-show 通常仅会进行一次创建操作,之后主要通过 css 来实现对其显示与隐藏状态的控制。当进行切换按钮等相关操作时,v-show 每次并不会重新去执行 DOM 的删除与创建动作,而仅仅是对元素的 display 属性在显示与 none 之间进行切换,不过其在初始渲染阶段确实存在相对较高的资源消耗情况。

        v-if 则有所不同,它会不断地进行元素的创建与销毁流程。在切换按钮等操作发生时,v-if 每次都会重新对元素进行相应的删除或创建操作,这使得它在切换性能方面会产生较高的消耗。具体来说,当 v-if 的条件判断为 true 时,会输出当前标签对应的元素;而当 v-else 的条件判断为 false 时,同样也会输出当前标签所对应的元素。

        总体来讲:如果元素涉及到特别频繁的切换情景,那么一般来说最好不要采用 v-if ,而是相对更推荐使用 v-show 。而如果元素存在可能永远都不会被显示出来进而被用户所看到的情况,那么此时较为适宜采用 v-if 。需要注意的是,在实际应用中,应根据具体的场景和需求来合理选择使用 v-show 或 v-if ,以达到最佳的性能和用户体验效果。

示例代码如下:

<!-- 在head中引入element.css、vue.js、element.js -->      
<link rel="stylesheet" href="./css/element-plus.css"/>    
<script src="./js/vue.global.js"></script>    
<script src="./js/element-plus.js"></script>    
<!-- body部分 -->    
<body>  
    <div id="app">  
       <el-row>  
            <el-col :span="24">  
                <el-divider content-position="left">v-show</el-divider>  
                <p v-show="flag1">段落</p>  
                <el-button type="primary" @click="toggle1">单个段落显示隐藏切换</el-button>  
                <p v-show="flag2">段落a</p>  
                <p v-show="!flag2">段落b</p>  
                <el-button type="success" @click="toggle2">多个段落显示隐藏切换</el-button>  
                <el-divider content-position="left">v-if、v-else</el-divider>  
                <p v-if="flag3">段落</p>  
                <el-button type="primary" @click="toggle3">单个段落显示隐藏切换</el-button>  
                <p v-if="flag4">段落a</p>  
                <p v-else>段落b</p>  
                <el-button type="success" @click="toggle4">多个段落显示隐藏切换</el-button>  
            </el-col>           
       </el-row>  
    </div>  
    <script>  
        const app=Vue.createApp({  
            data(){  
                return {  
                    flag1:true,  
                    flag2:true,  
                    flag3:true,  
                    flag4:true  
                }  
            },  
            methods:{  
                toggle1(){  
                    this.flag1=!this.flag1;  
                },  
                toggle2(){  
                    this.flag2=!this.flag2;  
                },  
                toggle3(){  
                    this.flag3=!this.flag3;  
                },  
                toggle4(){  
                    this.flag4=!this.flag4;  
                }  
            }  
        });  
        app.use(ElementPlus);  
        app.mount('#app');  
    </script>  
</body>  

        运行结果,截图所示:

        开启浏览器之后,按下 F12 键,此时便会弹出开发者工具窗口,在 Elements 下面的 p 标签呈现出如下图所示的状态,截图如下:

        当逐一点击浏览器页面里的四个按钮之后,浏览器所呈现出的运行效果,如下截图所示:

        当打开浏览器之后按下 F12 键,此时便会弹出开发者工具窗口,在 Elements 下面的 p 标签呈现出如下图所示的状态,截图如下:

        备注:其中,v-if 会持续地进行创建与销毁,而 v-show 仅仅只创建一次,是通过 css 来对显示和隐藏进行控制。

v-if、v-else、v-else-if 


        示例代码如下:

<body>  
    <div id="app">  
        <el-row>  
            <el-col :span="24">  
                <el-divider content-position="left">成绩查询</el-divider>  
                <el-button type="success" @click="inputData">查询</el-button>  
                <p v-if="parseInt(type) >= 90">您输入的分数是:{{type}},成绩:优秀</p>  
                <p v-else-if="parseInt(type) >= 80">您输入的分数是:{{type}},成绩:良好</p>  
                <p v-else-if="parseInt(type) >= 70">您输入的分数是:{{type}},成绩:中等</p>  
                <p v-else-if="parseInt(type) >= 60">您输入的分数是:{{type}},成绩:合格</p>  
                <p v-else-if="type === ''">暂无查询数据</p>  
                <p v-else>您输入的分数是:{{type}},成绩:不合格</p>  
            </el-col>  
        </el-row>  
    </div>  
    <script>  
        const {createApp}=Vue;  
        const app=createApp({  
            data(){  
                return {  
                    type:''  
                }  
            },  
            methods:{  
                inputData() {  
                    let typeData;  
                    while (true) {  
                        typeData = prompt('请输入您的分数:');  
                        const regex = /^[1-9]\d?$|^100$/;  
                        if (regex.test(typeData)) {  
                            break;  
                        } else {  
                            alert('请输入正确的分数!');  
                        }  
                    }  
                    this.type = typeData;  
                }  
            }  
        })  
        app.use(ElementPlus);  
        app.mount('#app');  
    </script>  
</body> 

        运行结果:

        分析:当点击“查询”按钮后,会在弹出的输入框中进行分数的输入操作,然后依据所输入的分数来展示相对应的查询数据。

        例如:当输入的值是“93”时,会返回“您所输入的分数时:93,成绩:优秀”;

        当输入的值为“85”时,会返回“您所输入的分数是:85,成绩:良好”;

        当输入的值为“77”时,会返回“您所输入的分数是:77,成绩:中等”;

        当输入的值为“60”时,会返回“您所输入的分数是:60,成绩:合格”;

        当输入的值为“53”时,会返回“您所输入的分数是:53,成绩:不合格”。

        输入分数,运行结果,截图如下:

出现这个错误的原因是在导入seaborn包时,无法从typing模块中导入名为'Protocol'的对象。 解决这个问题的方法有以下几种: 1. 检查你的Python版本是否符合seaborn包的要求,如果不符合,尝试更新Python版本。 2. 检查你的环境中是否安装了typing_extensions包,如果没有安装,可以使用以下命令安装:pip install typing_extensions。 3. 如果你使用的是Python 3.8版本以下的版本,你可以尝试使用typing_extensions包来代替typing模块来解决该问题。 4. 检查你的代码是否正确导入了seaborn包,并且没有其他导入错误。 5. 如果以上方法都无法解决问题,可以尝试在你的代码中使用其他的可替代包或者更新seaborn包的版本来解决该问题。 总结: 出现ImportError: cannot import name 'Protocol' from 'typing'错误的原因可能是由于Python版本不兼容、缺少typing_extensions包或者导入错误等原因造成的。可以根据具体情况尝试上述方法来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Anaconda\envs\tensorflow\lib\typing....](https://blog.csdn.net/yuhaix/article/details/124528628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端基地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值