Vue.js : 属性 或方法未在实例上定义但在渲染期间被引用

Vue.js : Property or method is not defined on the instance but referenced during render

我有

<template>
    <div class="dashboard">
        <Navbar />
        <MainPanel :title="Dashboard" :icon="dasboard" />
    </div>
</template>

<script>
import MainPanel from '../../components/MainPanel'
import Navbar from '../../components/Navbar'

export default {
    name: 'Dashboard',
    components: {
        Navbar,
        MainPanel
    }
}
</script>

如您所见,我正在尝试重用我的 MainPanel 组件。

主面板

<template>
    <v-container fluid class="my-5">
        <v-row>
            <v-flex col-xs-12>
                <v-card elevation="2" class="pb-15">
                    <v-flex xs12 class="text-center">
                        <v-card-title>
                            <v-btn dark text color="black">
                                <v-icon right class="mr-2">{{ icon }}</v-icon>
                                <span>{{ title }}</span>
                            </v-btn>
                        </v-card-title>
                    </v-flex>
                </v-card>
            </v-flex>
        </v-row>
    </v-container>
</template>
<script>
export default {
    name: 'MainPanel',
    props: {
        icon: String,
        title: String
    },
    data() {
        return {
            icon: '',
            title: ''
        }
    }
}
</script>
<style lang=""></style>

在控制台中,我一直收到此错误

[Vue warn]: Property or method "dasboard" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property.

有人可以给我一些提示吗?

在 props 中使用原始值时使用绑定符号 : 意味着值应该作为脚本选项中的属性存在:

 <MainPanel title="Dashboard" icon="dasboard" />

看来是个很简单的错误:

:title="Dashboard"

在 Vue 中使用列 (:) 在组件上添加道具或属性,将使用 属性 定义或在道具或数据中。 如果你使用 title="dashboard" 你实际上会传递一个字符串,这就是你想要的

根据Vue2 official guideprops可以简单地从属性中获取值或者通过v-bind传递来实现响应。

所以在这种情况下,您可能希望使用 title 而不是 :title

<MainPanel title="Dashboard" icon="dasboard" />

如果你想让 MainPanel 标题可以响应地改变那么你可以在 data 中声明一个变量并通过 v-bind:

<MainPanel :title="varaibleForTitle" :icon="varaibleForIcon" />

顺便说一句,您可以通过 v-bind 传递字符串值 - 尽管我不明白为什么会有人想要这样做。

<MainPanel :title="'MainPanel'" :icon="'dasboard'" />

干杯。