Vue3中当v-if和v-for同时使用时产生的问题和解决办法

 更新时间:2024年07月28日 10:20:57   作者:努力搞米  
封装一个组件时,我使用到了v-for和v-if,它们在同一标签内,总是提示v-for循环出来的item在实例中没有被定义,查询资料后原因是因为v-for和v-if在同级使用时,v-if优先级比v-for高,所以本文给大家介绍了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同时使用产生的问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue如何把组件方法暴露到window对象中

    vue如何把组件方法暴露到window对象中

    这篇文章主要介绍了vue如何把组件方法暴露到window对象中,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • eslint常见的一些报错及解决方法

    eslint常见的一些报错及解决方法

    这篇文章主要给大家介绍了关于eslint常见的一些报错及解决方法,解决eslint的报错问题可以要根据报错行数快速定位.文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • 基于express中路由规则及获取请求参数的方法

    基于express中路由规则及获取请求参数的方法

    下面小编就为大家分享一篇基于express中路由规则及获取请求参数的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Node.js+Vue脚手架环境搭建的方法步骤

    Node.js+Vue脚手架环境搭建的方法步骤

    这篇文章主要介绍了Node.js+Vue脚手架环境搭建的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2020-03-03
  • Vue组件之间的通信方式(推荐!)

    Vue组件之间的通信方式(推荐!)

    组件是 vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互进行直接的引用,所以组件间的相互通信是非常重要的,这篇文章主要给大家介绍了关于Vue组件之间的通信方式,需要的朋友可以参考下
    2022-06-06
  • vue项目实现点击目标区域之外可关闭(隐藏)目标区域

    vue项目实现点击目标区域之外可关闭(隐藏)目标区域

    这篇文章主要介绍了vue项目实现点击目标区域之外可关闭(隐藏)目标区域,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • vue实现可拖拽的dialog弹框

    vue实现可拖拽的dialog弹框

    element的dialog弹框在项目中挺常用的。拖拽形式的弹框会提高用户体验,本文实现了vue可拖拽的dialog弹框,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • vue框架搭建之axios使用教程

    vue框架搭建之axios使用教程

    本文重点介绍axios如何配合vue搭建项目框架,文章给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-07-07
  • vue中使用keep-alive动态删除已缓存组件方式

    vue中使用keep-alive动态删除已缓存组件方式

    这篇文章主要介绍了vue中使用keep-alive动态删除已缓存组件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • @vue/cli4.x版本的vue.config.js常用配置方式

    @vue/cli4.x版本的vue.config.js常用配置方式

    这篇文章主要介绍了@vue/cli4.x版本的vue.config.js常用配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05

最新评论