Vue 中,使用 v-for 和 v-if 在同一个元素上时,出现报错,怎么解决

直接上报错图:

上图所示,其实就是 因为 v-for 的优先级比 v-if 高,Vue 会先尝试遍历 v-for 里面,然后再检查 v-if 的条件,这可能会导致意外的行为或错误。

解决办法有两种:

1.常见办法,也就是编辑器提醒的,使用 template 包裹 v-for ,优先 v-if

javascript 复制代码
<template>
  <el-table>
    <template v-if="approveInfo">
      <el-table-column v-for="item in plusRatio" :key="item" :prop="item.prop" :label="item.label">
        <!-- 列的内容 -->
      </el-table-column>
    </template>
  </el-table>
</template>

首先判断 approveInfo 的值,只有当 approveInfo 为 true 时,才会渲染 template 内部的元素。

2.使用计算属性来过滤数据

javascript 复制代码
<template>
  <el-table>
     <el-table-column v-for="item in filteredPlusRatio" :key="item" :prop="item.prop" :label="item.label">
       <!-- 列的内容 -->
     </el-table-column>
  </el-table>
</template>

<script>
export default {
  data() {
    return {
      approveInfo: true,
      plusRatio: [
        { prop: 'ratio1', label: '比例 1' },
        { prop: 'ratio2', label: '比例 2' },
        // 其他数据
      ]
    };
  },
  computed: {
    filteredPlusRatio() {
      if (this.approveInfo) {
        return this.plusRatio;
      } else {
        return [];
      }
    }
  }
};
</script>

根据 approveInfo 的值决定是否返回 plusRatio 数组或空数组,确保只有在 approveInfo 为 true 时才渲染 el-table-column。

注意点

  1. 避免在 v-for 内部使用 v-if,因为 v-for 优先级高,会导致不必要的性能开销。
  2. 计算属性会根据依赖的响应式数据自动更新,确保逻辑的正确性。
相关推荐
Gracemark16 小时前
高德地图-地图选择经纬度问题【使用输入提示-使用Autocomplete进行联想输入】(复盘)
vue.js
天下无贼17 小时前
【手写组件】 Vue3 + Uniapp 手写一个高颜值日历组件(含跨月补全+今日高亮+选中状态)
前端·vue.js
洋葱头_19 小时前
vue3项目不支持低版本的android,如何做兼容
前端·vue.js
奔跑的蜗牛ing19 小时前
Vue3 + Element Plus 输入框省略号插件:零侵入式全局解决方案
vue.js·typescript·前端工程化
最后一个农民工21 小时前
vue3实现仿豆包模版式智能输入框
前端·vue.js
艾小码1 天前
Vue组件到底怎么定义?全局注册和局部注册,我踩过的坑你别再踩了!
前端·javascript·vue.js
wusp19941 天前
项目实战——“微商城”前后台【005】之前台项目首页编写
vue.js·vant·底部导航栏
森林的尽头是阳光1 天前
vue防抖节流,全局定义,使用
前端·javascript·vue.js
计算机毕业设计木哥1 天前
计算机毕设选题推荐:基于Java+SpringBoot物品租赁管理系统【源码+文档+调试】
java·vue.js·spring boot·mysql·spark·毕业设计·课程设计
zero13_小葵司1 天前
Vue 3 前端工程化规范
前端·javascript·vue.js