vue中v-if和v-for能用在同一个标签吗-NO
当
v-if
与v-for
一起使用时,v-for
具有比v-if
更高的优先级,这意味着v-if
将分别重复运行于每个v-for
循环中所以,不推荐v-if和v-for同时使用
一、不应同时使用
v-for和v-if不应该一起使用。
原因:v-for
比v-if
优先,即每一次都需要遍历整个数组,影响速度。
例如重构项目的时候遇到的旧代码:
<div
v-for="(fileMsg,index) in fileMsgList"
:key="fileMsg.id"
v-if="index < 2"
>
<sys-file-layout :fileMsg="fileMsg"></sys-file-layout>
</div>
想要循环生成一系列组件块,但是不希望生成序号1之后的内容,同时用了v-if
和v-for
,那么,还是会根据整个数组生成所有组件块,之后才判断v-if
让多余的小时,非常耗资源。
二、解决
1、必要情况下应该替换成computed属性。
computed: {
fileMsgListCom() {
return this.fileMsgList.filter((item, index) => {
return item < 2;
});
}
}
<div
class="file_name"
v-for="(fileMsg,index) in fileMsgListCom"
:key="fileMsg.id"
>
<sys-file-layout :fileMsg="fileMsg"></sys-file-layout>
</div>
2、把 v-if
改成 v-show
如果此 v-for
上层已经有 v-for
循环了,此处只是取了上层循环对象中的一个数组继续作循环(其实这里项目遇到的就是这个问题),我想不出方法使用computed计算属性如何计算(获取不到多层循环后的此数组内容)。
也可以 v-if
改成 v-show
,可以共存。
<div
class="file_name"
v-for="(fileMsg,index) in file.documents"
:key="fileMsg.id"
v-show="index < 2"
>
<sys-file-layout :fileMsg="fileMsg"></sys-file-layout>
</div>
本文来自博客园,作者:JackieDYH,转载请注明原文链接:https://www.cnblogs.com/JackieDYH/p/17634507.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现