Vue中v-for不能和v-if写在一起的原因v-for指令用于循环渲染列表,v-if用于根据条件动态渲染元素
这两个指令是vue中最常用的指令,但是不能一起使用,因为v-for比v-if优先级高
一个例子是:
templatedivclass='home'h1这是一个主页/h1h4v-for='(item,index)inlist':key='index'v-if='show===true'{{item}}/h4/div/templatescriptimport{ref}from'vue'exportdefault{name:'HomePage',setup(){constlist=[1,2,3,4,5,6]constshow=truereturn{list,show}}}/脚本
我们写的初衷是,如果show为false,我们就不会显示列表。如果show为true,我们将循环遍历列表。
但如果把v-for和v-if放在一起,其实就相当于依次渲染6个div,每一个都加上了v-if判断。
//相当于下面的形式h4v-if='show===true'1/h4h4v-if='show===true'2/h4h4v-if='show===true'3/h4h4v-if='show===true'4/h4h4v-if='show===true'5/h4h4v-if='show===true'6/h4
也就是说,每一次循环都会进行v-if判断。这是非常消耗性能的。大量的判断会大大降低项目的质量。因此,Vue官方并没有在风格指南中推荐它,甚至允许你将其放入风格指南中。一起写
但在实际开发中,肯定会遇到类似的场景,需要根据条件循环渲染。如何解决这个问题呢?
方法一:
在v-if不依赖v-for的前提下,将v-if直接移到外层。由于v-for的优先级比v-if高,所以我先把v-if放在最外层。难道还不足以做出判断吗?
templatedivclass='home'h1这是一个主页/h1divv-if='show===true'h4v-for='(item,index)inlist':key='index'{{item}}/h4/div/div/模板
方法二:
上面的例子中,v-if依赖于data数据中的show变量来控制是否显示,即不依赖于v-for的某个值。
如果我需要根据v-for的索引值来控制是否显示怎么办?
即v-if的判断条件需要依赖于v-for的某个值(item,index)
templatedivclass='home'h1这是一个主页/h1h4v-for='(item,index)inlist_filter':key='index'{{item}}/h4/div/templatescriptimport{计算}from'vue'export默认{name:'主页',setup(){constlist=[1,2,3,4,5,6]constlist_filter=计算(()=list.filter((item,index)=item!==5))返回{列表,list_filter}}}/脚本
对于这种情况,我们可以用计算属性list_filter替换list,并让它返回过滤后的列表
好处是:
1.过滤列表
只有当列表数组发生相关变化时才会重新计算,使得过滤更加高效。
2.解耦渲染层的逻辑,使其更易于维护。
如果要实现基于框架添加页面的确认弹窗。提示:文章写完后,可以自动生成目录。如何生成可以参考右边的帮助文档。文章目录实现若易框架添加页面的确认弹窗1.若易封装该层…
一个令人惊叹的ChatGPT项目,开源!最近我在GitHub上发现了一个很受欢迎的开源项目。好家伙,仔细一看,可以发现它还是微软开源的,与最近流行的ChatGP…
数字图像处理Matlab实验:空间滤波器1、空间滤波原理空间滤波就是使用固定大小的模板对原始图像进行卷积运算,得到的新图像就是滤波结果。滤波是指对某个信号进行过…
Vue项目集成Markdown标记语言编辑器Markdown编辑器的使用这是一个基于Vue的Markdown编辑器。它可用于编辑Markdown语法和解析效果图…
ElementUI中国省市级联选择器目录1.安装2.说明3.示例1.安装npminstallelement-china-area-data-S2.说明文档:el…
2024-05-17 10:33:28
2024-05-17 09:54:49
2024-05-17 09:35:46
2024-05-17 09:21:34
2024-05-17 09:08:39
大家好,今天小编关注到一个比较有意思的话题,就是关于电脑制版哪里学的问题,于是小…
大家好,今天小编关注到一个比较有意思的话题,就是关于洛阳技能培训机构烘焙的问题,…