Vue/Vuetify 表示图标值未定义或为空
Vue/Vuetify says Icon value is undefined or null
我从数据库加载项目列表,这些项目将在列表中显示给用户。每个项目都是特定的类型,根据类型,我希望在它旁边显示一个图标。
我已经创建了一个组件来控制将要显示的图标。该组件接受 type sa 属性并相应地呈现 mdi-icon。
<div v-if="iconName !== ''">
<v-icon large color="blue-grey darken-2">
{{ iconName }}
</v-icon>
</div>
iconName 的值是在挂载时提供的,或者是计算出来的 属性 - 我都试过了。
export default {
props: ["activityType"],
data() {
return {
iconType: this.activityType,
iconName: 'mdi-script-text-outline',
iconMapping: {
learning_material_video: "mdi-video",
learning_material_quiz: "mdi-head-question-outline",
learning_material_article: "mdi-script-text-outline",
},
};
},
methods: {},
mounted(){
this.iconName = this.iconMapping[this.iconType]
},
computed: {
// iconName() {
// return this.iconMapping[this.activityType]
// },
},
};
这呈现得非常好,我可以忽略并继续处理下一个组件,但控制台中的错误有点令人担忧。
Uncaught (in promise) Error: Icon value is undefined or null
at ReactiveEffect.eval [as fn] (icons.tsx?ff78:168:1)
at ReactiveEffect.run (reactivity.esm-bundler.js?89dc:167:1)
at ComputedRefImpl.get value [as value] (reactivity.esm-bundler.js?89dc:1101:1)
at Proxy.eval (VIcon.tsx?e5c2:53:1)
at renderComponentRoot (runtime-core.esm-bundler.js?d2dd:893:1)
at ReactiveEffect.componentUpdateFn [as fn] (runtime-core.esm-bundler.js?d2dd:5098:1)
at ReactiveEffect.run (reactivity.esm-bundler.js?89dc:167:1)
at callWithErrorHandling (runtime-core.esm-bundler.js?d2dd:155:1)
at flushJobs (runtime-core.esm-bundler.js?d2dd:394:1)
at flushJobs (runtime-core.esm-bundler.js?d2dd:409:1)
这对页面的外观或工作方式没有影响,但我担心这是否会在以后造成问题。我进入 Vue 还不到 5 天,我可能在这里做错了什么。我的代码是正确的方法还是可以做得更好?
ps。这是 Vuetify-3。
I load a list of items from the db
我认为问题出在某个地方。您得到的错误基本上是说,当您获取数据时,出现了问题,但您没有 catch 它(不要对此做任何事情)。我认为在您的情况下,您需要捕获错误并为 catch
块内的 Icon
分配一个值。
你应该使用安全防护装置:
<template>
<div>
<v-icon large color="blue-grey darken-2">{{ iconName }}</v-icon>
</div>
</template>
<script>
export default
{
name: 'MyCustomComponent',
props:
{
activityType:
{
type: String,
default: ''
}
},
computed
{
iconName()
{
return {
learning_material_video: "mdi-video",
learning_material_quiz: "mdi-head-question-outline",
learning_material_article: "mdi-script-text-outline",
}[this.activityType] || 'mdi-script-text-outline';
}
}
}
我从数据库加载项目列表,这些项目将在列表中显示给用户。每个项目都是特定的类型,根据类型,我希望在它旁边显示一个图标。
我已经创建了一个组件来控制将要显示的图标。该组件接受 type sa 属性并相应地呈现 mdi-icon。
<div v-if="iconName !== ''">
<v-icon large color="blue-grey darken-2">
{{ iconName }}
</v-icon>
</div>
iconName 的值是在挂载时提供的,或者是计算出来的 属性 - 我都试过了。
export default {
props: ["activityType"],
data() {
return {
iconType: this.activityType,
iconName: 'mdi-script-text-outline',
iconMapping: {
learning_material_video: "mdi-video",
learning_material_quiz: "mdi-head-question-outline",
learning_material_article: "mdi-script-text-outline",
},
};
},
methods: {},
mounted(){
this.iconName = this.iconMapping[this.iconType]
},
computed: {
// iconName() {
// return this.iconMapping[this.activityType]
// },
},
};
这呈现得非常好,我可以忽略并继续处理下一个组件,但控制台中的错误有点令人担忧。
Uncaught (in promise) Error: Icon value is undefined or null
at ReactiveEffect.eval [as fn] (icons.tsx?ff78:168:1)
at ReactiveEffect.run (reactivity.esm-bundler.js?89dc:167:1)
at ComputedRefImpl.get value [as value] (reactivity.esm-bundler.js?89dc:1101:1)
at Proxy.eval (VIcon.tsx?e5c2:53:1)
at renderComponentRoot (runtime-core.esm-bundler.js?d2dd:893:1)
at ReactiveEffect.componentUpdateFn [as fn] (runtime-core.esm-bundler.js?d2dd:5098:1)
at ReactiveEffect.run (reactivity.esm-bundler.js?89dc:167:1)
at callWithErrorHandling (runtime-core.esm-bundler.js?d2dd:155:1)
at flushJobs (runtime-core.esm-bundler.js?d2dd:394:1)
at flushJobs (runtime-core.esm-bundler.js?d2dd:409:1)
这对页面的外观或工作方式没有影响,但我担心这是否会在以后造成问题。我进入 Vue 还不到 5 天,我可能在这里做错了什么。我的代码是正确的方法还是可以做得更好?
ps。这是 Vuetify-3。
I load a list of items from the db
我认为问题出在某个地方。您得到的错误基本上是说,当您获取数据时,出现了问题,但您没有 catch 它(不要对此做任何事情)。我认为在您的情况下,您需要捕获错误并为 catch
块内的 Icon
分配一个值。
你应该使用安全防护装置:
<template>
<div>
<v-icon large color="blue-grey darken-2">{{ iconName }}</v-icon>
</div>
</template>
<script>
export default
{
name: 'MyCustomComponent',
props:
{
activityType:
{
type: String,
default: ''
}
},
computed
{
iconName()
{
return {
learning_material_video: "mdi-video",
learning_material_quiz: "mdi-head-question-outline",
learning_material_article: "mdi-script-text-outline",
}[this.activityType] || 'mdi-script-text-outline';
}
}
}