“TypeError: Cannot read properties of undefined (reading ‘0‘)“。Vue下v-if条件渲染报错解决

代码如下

<el-descriptions-item  label="支撑层" label-class-name="my-label" content-class-name="my-content">
  <span v-if="!TagInfo.brace[0]">--</span>
  <el-tag v-else size="small" v-for="item in TagInfo.brace" :key="item.index">{{item}}</el-tag>
</el-descriptions-item>

控制台报错如下,界面可正常显示
在这里插入图片描述
原因: 接口数据为异步获取,界面渲染时会先判断数据情况,此时TagInfo.brace[0]并未定义故报错,当异步获取数据获取到时,通过v-if再次判断正常渲染,所以界面无错误。
解决办法: 网上很多方案都很蠢,也不太能执行成功,比如利用计算属性,利用延迟函数等等
其实可以利用逻辑运算符巧妙地解决该问题,如下:

<el-descriptions-item  label="支撑层" label-class-name="my-label" content-class-name="my-content">
  <span v-if="TagInfo.brace&&!TagInfo.brace[0]">--</span>
  <el-tag v-else size="small" v-for="item in TagInfo.brace" :key="item.index">{{item}}</el-tag>
</el-descriptions-item>

解决原因:&&从左到右执行,当TagInfo.brace不存在的时候,不继续运行,故不会报“0”的错误。由于我的西项目接口格式TagInfo.brace一定存在,我这样写就可以。如果要通用,需要如下写

<el-descriptions-item  label="支撑层" label-class-name="my-label" content-class-name="my-content">
  <span v-if="TagInfo&&TagInfo.brace&&!TagInfo.brace[0]">--</span>
  <el-tag v-else size="small" v-for="item in TagInfo.brace" :key="item.index">{{item}}</el-tag>
</el-descriptions-item>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值