Vue3中当v-if和v-for同时使用时产生的问题和解决办法
问题
封装一个组件时,我使用到了v-for和v-if,它们在同一标签内,总是提示v-for循环出来的item在实例中没有被定义,查询资料后原因是因为v-for和v-if在同级使用时,v-if优先级比v-for高,所以拿不到v-for循环出来的item。
<el-table-column align="center" v-for="item in tableData" v-if="item.show" :key="item.prop" :prop="item.prop" :label="item.label" :sortable="item.sortable ? 'custom' : false" :width="item.width" :formatter="item.formatter" class="tooltip-column" > </el-table-column>
解决办法:
1.我们在外层包裹一个 <template> ,先去循环再去判断,这样v-if就可以正常使用了
<template v-for="item in columns"> <el-table-column align="center" v-if="item.show" :key="item.prop" :prop="item.prop" :label="item.label" :sortable="item.sortable ? 'custom' : false" :width="item.width" :formatter="item.formatter" class="tooltip-column" > </el-table-column> </template>
2.不使用template标签,我们可以在script中处理
使用计算属性computed解决,通过数组方法filter过滤数组,v-for直接循环计算属性后的结果,就不需要使用v-if了。而且computed是有缓存的,就是在它的依赖没有变化时,不会再执行对应计算属性的回调函数,就提高了性能。
// 计算属性:处理显示列 const tableColumns = computed(() => { return props.columns.filter((item) => typeof item.show === "undefined" ? true : item.show ); });
<el-table-column align="center" v-for="item in tableColumns" :key="item.prop" :prop="item.prop" :label="item.label" :sortable="item.sortable ? 'custom' : false" :width="item.width" :formatter="item.formatter" class="tooltip-column" > </el-table-column>
到此这篇关于Vue3中当v-if和v-for同时使用时产生的问题和解决办法的文章就介绍到这了,更多相关Vue3 v-if和v-for同时使用产生的问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
本篇文章主要介绍了详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码),具有一定的参考价值,感兴趣的小伙伴们可以参考一下。2017-03-03vue2+elementUI的el-tree的选中、高亮、定位功能的实现
这篇文章主要介绍了vue2+elementUI的el-tree的选中、高亮、定位功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-09-09vue3+Element Plus实现自定义穿梭框的详细代码
找到一个好用的vue树形穿梭框组件都很难,又不想仅仅因为一个穿梭框在element-ui之外其他重量级插件,本文给大家分享vue3+Element Plus实现自定义穿梭框的示例代码,感兴趣的朋友一起看看吧2024-01-01
最新评论