vue.js - Vue 条件渲染对条件给出错误
问题描述
我正在尝试学习 Vue,但在条件渲染方面遇到了麻烦。它没有破坏应用程序,但它给了我一个控制台错误。
最初,字符是一个空对象。
我试图仅在存在字符时(按下按钮时)渲染卡片。目前我收到错误
Error in render: "TypeError: Cannot read property 'length' of undefined"
目前,一张卡片在它应该渲染之前不会渲染,但它给了我这些错误。
我的组件是:
<template>
<v-card v-if="character" min-width="350" outlined>
<div class="d-flex flex-no-wrap justify-space-between">
<v-avatar class="ma-3" size="125" tile>
<v-img :src="character.image"></v-img>
</v-avatar>
<div>
<v-card-title class="secondary--text text-h6">{{
character.name
}}</v-card-title>
<v-card-subtitle class="secondary--text"
>Featured in {{ character.episode.length }} episodes</v-card-subtitle
>
<v-card-subtitle class="secondary--text pb-0 pt-0">{{
character.species
}}</v-card-subtitle>
<br />
<v-card-subtitle class="secondary--text pt-0"
>Origin: {{ character.origin.name }}</v-card-subtitle
>
</div>
</div>
</v-card>
<div v-else></div>
</template>
<script>
import { mapGetters } from 'vuex';
export default {
name: 'CharacterCard',
computed: mapGetters(['character'])
};
</script>
解决方案
你说
最初,字符是一个空对象。
然后你试图访问character.episode.length
哪个给出错误"TypeError: Cannot read property 'length' of undefined"
,因为character.episode
它是未定义的,它没有属性“长度”
有几种潜在的解决方案。这里有几个:
(character.episode || []).length
character.episode && character.episode.length || 0
character.episode?.length || 0
注意 - 可能需要一些 babel 魔法才能使可选链接工作。见:https ://forum.vuejs.org/t/does-vue-cli-3-come-with-pre-configured-optional-chaining/42609
您可以直接将其直接放入模板中,或者将其放入计算属性中可能会更好。
推荐阅读
- javascript - 设置类属性的事件监听器
- javascript - 回调函数语法 - 为什么不允许这样做?
- html - Flex:100% 高度包装 div 不起作用
- php - 尝试仅从当前产品帖子(Woocommerce)中获取属性
- css - 在 Angular 9 中折叠侧边栏时如何显示链接文本?
- java - 从其构建的 Jar 文件运行 java(另一种方式)
- maven - Maven EAR 插件:生成的 EAR 文件不包含 WAR 或 EJB 或 RAR 模块
- javascript - 如何随机创建滴数?
- php - JSON 循环使用 Steam API 获取特定游戏的 playtime_forever
- html - 用css悬停时显示一个图标