Vue3下v-for和v-if在同一个元素上使用导致v-if失效

在HBuilderX开发uni-app应用时,遇到Vue3中v-for和v-if结合的问题。微信开发者工具中v-if失效,原因是v-if优先级高于v-for。解决方法包括在子元素上使用v-if,替换为v-show,或降级到Vue2版本。
摘要由CSDN通过智能技术生成

问题现象

我在HBuilderX下写一个uni-app应用,用的Vue3版本,在某个元素下同时使用了v-for和v-if,运行到微信开发者工具,发现v-if这个条件判断不起作用。

从manifest.json文件的基础配置可以看到,用的是Vue3:
在这里插入图片描述

代码片段如下,在view元素上同时使用了v-for和v-if:
在这里插入图片描述

运行到微信开发者工具,发现v-if条件过滤没有起作用,因为本意是要将圈出来的图过滤掉,不显示,但现在显示出来了:
在这里插入图片描述

问题原因

https://cn.vuejs.org/guide/essentials/list.html#v-for-with-v-if

当v-for和v-if同时存在于一个节点上时,v-if 比 v-for 的优先级更高。这意味着 v-if 的条件将无法访问到 v-for 作用域内定义的变量别名:
在这里插入图片描述

所以官网给出的建议:同时使用 v-if 和 v-for 是不推荐的,因为这样二者的优先级不明显。

解决方法

方法一:在v-for修饰的元素的子元素上使用v-if

v-for和v-if不要同时作用在一个元素上,可以在v-for修饰的元素的子元素上使用v-if,例如:
在这里插入图片描述

方法二:将v-if改为v-show,这样就可以作用在同一个元素上

将v-if改为v-show,这样就可以作用在同一个元素上,例如:
在这里插入图片描述

方法三:使用Vue2版本,这样v-for和v-if就可以作用在同一个元素上

使用Vue2版本,这样v-for和v-if就可以作用在同一个元素上。可以在manifest.json文件的基础配置中修改Vue的版本:
在这里插入图片描述

v-for和v-if作用在同一个元素上:
在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值