v-if和v-show的区别,易懂

本文探讨了Vue中的v-if和v-show指令在控制元素显示时的区别。v-if根据条件直接销毁或创建DOM节点,适合于条件不频繁改变的情况,以减少DOM操作。而v-show通过切换CSS的display属性来隐藏或显示元素,适用于频繁切换显示状态的场景,能保持DOM树的稳定性。在实际开发中,应根据显示状态的变化频率选择合适的指令。
摘要由CSDN通过智能技术生成

v-show

<template>
  <div class="App">
    <h1 v-show="isFind">something</h1>
    <button @click="isFind = !isFind">切换</button>
  </div>
</template>

当v-show为false的时候,dom节点显示。如图:
在这里插入图片描述

v-if

<template>
  <div class="App">
    <h1 v-if="isFind">something</h1>
    <button @click="isFind = !isFind">切换</button>
  </div>
</template>

使用v-if为false的时候,dom节点显示。如图:
在这里插入图片描述

v-if能够控制是否生成vnode(虚拟节点),也就间接控制了是否生成对应的dom。当v-if为true时,会生成对应的vnode(虚拟节点),并生成对应的dom元素;当其为false时,不会生成对应的vnode(虚拟节点),自然不会生成任何的dom元素。

v-show始终会生成vnode(虚拟节点),也就间接导致了,始终生成dom。他只是控制dom的display属性,当v-show为true时,不做任何处理;当其为false时,生成的dom的display属性为none;

使用v-if可以有效的减少数的节点和渲染量,但也会导致树的不稳定;而使用v-show可以保持树的稳定,但不能减少树的节点和渲染量。

因此,在实际开发中,显示状态变化频繁的情况下应使用v-show,以保持树的稳定;显示状态变化较少的时候应该使用v-if,以减少树的节点和渲染量.

<div v-else-if="per.dict_value === 'file_name'"> <el-tooltip placement="top" effect="dark" v-if="scope.row.download_time || scope.row.repair_download_time"> <div slot="content" > <span v-if="scope.row.repair_download_time">{{ parseTime(scope.row.repair_download_time,'{y}-{m}-{d} {h}:{i}:{s}') }}</span> <span v-else-if="scope.row.download_time">{{ parseTime(scope.row.download_time,'{y}-{m}-{d} {h}:{i}:{s}') }}</span> </div> <el-link v-if="scope.row.repair_file_id" :key="scope.row.repair_file_id" style="display: block;color: #67C23A" icon="el-icon-paperclip" @click="downloadOrderExcel(scope.row.repair_file_id, scope.row.order_no, scope.row.repair_file_name)" >{{ scope.row.repair_file_name }}</el-link> <el-link v-else-if="scope.row.file_id" :key="scope.row.file_id" style="display: block;color: #67C23A" icon="el-icon-paperclip" @click="downloadOrderExcel(scope.row.file_id, scope.row.order_no, scope.row.file_name)" >{{ scope.row[per.dict_value] }}</el-link> </el-tooltip> <div v-else> <el-link v-if="scope.row.repair_file_id" :key="scope.row.repair_file_id" style="display: block;" icon="el-icon-paperclip" @click="downloadOrderExcel(scope.row.repair_file_id, scope.row.order_no, scope.row.repair_file_name)" >{{ scope.row.repair_file_name }}</el-link> <el-link v-else-if="scope.row.file_id" :key="scope.row.file_id" style="display: block;" icon="el-icon-paperclip" @click="downloadOrderExcel(scope.row.file_id, scope.row.order_no, scope.row.file_name)" >{{ scope.row[per.dict_value] }}</el-link> </div> </div>优化这段代码
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值