Vue CLI error: Property or method "data" is not defined on the instance
Vue CLI error: Property or method "data" is not defined on the instance
我的 Vue 项目在尝试从本地 JSON 渲染数据时遇到问题。我已阅读说明并遵循它们——每一步——但错误仍然存在。由于我对Vue和高级编程本身是新手,所以我寻求帮助。
english.json
{
"0": {
"text": "This be a square",
"color": "blue",
"size": "small"
},
"1": {
"text": "here lies a square",
"color": "red",
"size": "medium"
},
"2": {
"text": "Tharr be a squaree",
"color": "black",
"size": "large"
}
}
ExperienceText.vue
<template>
<article class="content__box" :v-for="data in expJson">
{{data.text}}
<h6>{{data.text}}</h6>
<h3>{{data.color}}</h3>
<p>{{data.size}}</p>
</article>
</template>
<script>
import json from "@/components/json/english.json";
export default {
name: "ExperienceText",
data() {
return {
expJson: json
};
}
};
</script>
错误
[Vue warn]: Property or method "data" 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. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.
found in
---> <ExperienceText> at src/components/mainComp/subComp/ExperienceText.vue
<ExperienceSection> at src/components/mainComp/ExperienceSection.vue
<Experience> at src/components/mainComp/Experience.vue
<Main> at src/components/Main.vue
<Container> at src/views/Container.vue
<App> at src/App.vue
<Root>
Show 60 more frames
vue.runtime.esm.js?2b0e:619 [Vue warn]: Property or method "data" 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. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.
found in
---> <ExperienceText> at src/components/mainComp/subComp/ExperienceText.vue
<ExperienceSection> at src/components/mainComp/ExperienceSection.vue
<Experience> at src/components/mainComp/Experience.vue
<Main> at src/components/Main.vue
<Container> at src/views/Container.vue
<App> at src/App.vue
<Root>
vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in render: "TypeError: Cannot read property 'text' of undefined"
found in
---> <ExperienceText> at src/components/mainComp/subComp/ExperienceText.vue
<ExperienceSection> at src/components/mainComp/ExperienceSection.vue
<Experience> at src/components/mainComp/Experience.vue
<Main> at src/components/Main.vue
<Container> at src/views/Container.vue
<App> at src/App.vue
<Root>
vue.runtime.esm.js?2b0e:1888 TypeError: Cannot read property 'text' of undefined
at Proxy.render (eval at ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"db619a62-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/mainComp/subComp/ExperienceText.vue?vue&type=template&id=088f3b1e& (app.js:1089), <anonymous>:15:36)
at VueComponent.Vue._render (vue.runtime.esm.js?2b0e:3548)
at VueComponent.updateComponent (vue.runtime.esm.js?2b0e:4066)
at Watcher.get (vue.runtime.esm.js?2b0e:4479)
at new Watcher (vue.runtime.esm.js?2b0e:4468)
at mountComponent (vue.runtime.esm.js?2b0e:4073)
at VueComponent.Vue.$mount (vue.runtime.esm.js?2b0e:8415)
at init (vue.runtime.esm.js?2b0e:3118)
at createComponent (vue.runtime.esm.js?2b0e:5978)
at createElm (vue.runtime.esm.js?2b0e:5925)
JSON到了
在我的应用中,文章标签根本不可见。我很确定这是因为 JSON 数据没有正确呈现。我该如何解决这个问题?
希望对您有所帮助。
从 :v-for
中删除 :
冒号
const yourJson = {
"0": {
"text": "This be a square",
"color": "blue",
"size": "small"
},
"1": {
"text": "here lies a square",
"color": "red",
"size": "medium"
},
"2": {
"text": "Tharr be a squaree",
"color": "black",
"size": "large"
}
}
new Vue({
el: '#app',
data() {
return {
expJson: yourJson,
};
},
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<article class="content__box" v-for="data in expJson" :style="{backgroundColor: data.color}" style="color: white; padding: 10px">
{{data.text}}
<h6>{{data.text}}</h6>
<h3>{{data.color}}</h3>
<p>{{data.size}}</p>
</article>
</div>
首先,从 v-for
中删除 :
,因为它是指令而不是绑定。
<article class="content__box" v-for="data in expJson">
您还需要在所有 v-for
元素上使用 :key
。由于您的数据没有唯一标识符,我们可以使用索引:
<article class="content__box" v-for="(data, index) in expJson" :key="index">
此外,这仍然会报错,因为所有组件都必须具有 one root element,而 v-for
可能会创建多个根元素。您可以将所有内容包装在 div:
中
<template>
<div>
<article class="content__box" v-for="(data, index) in expJson" :key="index">
{{data.text}}
<h6>{{data.text}}</h6>
<h3>{{data.color}}</h3>
<p>{{data.size}}</p>
</article>
</div>
</template>
我的 Vue 项目在尝试从本地 JSON 渲染数据时遇到问题。我已阅读说明并遵循它们——每一步——但错误仍然存在。由于我对Vue和高级编程本身是新手,所以我寻求帮助。
english.json
{
"0": {
"text": "This be a square",
"color": "blue",
"size": "small"
},
"1": {
"text": "here lies a square",
"color": "red",
"size": "medium"
},
"2": {
"text": "Tharr be a squaree",
"color": "black",
"size": "large"
}
}
ExperienceText.vue
<template>
<article class="content__box" :v-for="data in expJson">
{{data.text}}
<h6>{{data.text}}</h6>
<h3>{{data.color}}</h3>
<p>{{data.size}}</p>
</article>
</template>
<script>
import json from "@/components/json/english.json";
export default {
name: "ExperienceText",
data() {
return {
expJson: json
};
}
};
</script>
错误
[Vue warn]: Property or method "data" 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. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.
found in
---> <ExperienceText> at src/components/mainComp/subComp/ExperienceText.vue
<ExperienceSection> at src/components/mainComp/ExperienceSection.vue
<Experience> at src/components/mainComp/Experience.vue
<Main> at src/components/Main.vue
<Container> at src/views/Container.vue
<App> at src/App.vue
<Root>
Show 60 more frames
vue.runtime.esm.js?2b0e:619 [Vue warn]: Property or method "data" 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. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.
found in
---> <ExperienceText> at src/components/mainComp/subComp/ExperienceText.vue
<ExperienceSection> at src/components/mainComp/ExperienceSection.vue
<Experience> at src/components/mainComp/Experience.vue
<Main> at src/components/Main.vue
<Container> at src/views/Container.vue
<App> at src/App.vue
<Root>
vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in render: "TypeError: Cannot read property 'text' of undefined"
found in
---> <ExperienceText> at src/components/mainComp/subComp/ExperienceText.vue
<ExperienceSection> at src/components/mainComp/ExperienceSection.vue
<Experience> at src/components/mainComp/Experience.vue
<Main> at src/components/Main.vue
<Container> at src/views/Container.vue
<App> at src/App.vue
<Root>
vue.runtime.esm.js?2b0e:1888 TypeError: Cannot read property 'text' of undefined
at Proxy.render (eval at ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"db619a62-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/mainComp/subComp/ExperienceText.vue?vue&type=template&id=088f3b1e& (app.js:1089), <anonymous>:15:36)
at VueComponent.Vue._render (vue.runtime.esm.js?2b0e:3548)
at VueComponent.updateComponent (vue.runtime.esm.js?2b0e:4066)
at Watcher.get (vue.runtime.esm.js?2b0e:4479)
at new Watcher (vue.runtime.esm.js?2b0e:4468)
at mountComponent (vue.runtime.esm.js?2b0e:4073)
at VueComponent.Vue.$mount (vue.runtime.esm.js?2b0e:8415)
at init (vue.runtime.esm.js?2b0e:3118)
at createComponent (vue.runtime.esm.js?2b0e:5978)
at createElm (vue.runtime.esm.js?2b0e:5925)
JSON到了
在我的应用中,文章标签根本不可见。我很确定这是因为 JSON 数据没有正确呈现。我该如何解决这个问题?
希望对您有所帮助。
从 :v-for
:
冒号
const yourJson = {
"0": {
"text": "This be a square",
"color": "blue",
"size": "small"
},
"1": {
"text": "here lies a square",
"color": "red",
"size": "medium"
},
"2": {
"text": "Tharr be a squaree",
"color": "black",
"size": "large"
}
}
new Vue({
el: '#app',
data() {
return {
expJson: yourJson,
};
},
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<article class="content__box" v-for="data in expJson" :style="{backgroundColor: data.color}" style="color: white; padding: 10px">
{{data.text}}
<h6>{{data.text}}</h6>
<h3>{{data.color}}</h3>
<p>{{data.size}}</p>
</article>
</div>
首先,从 v-for
中删除 :
,因为它是指令而不是绑定。
<article class="content__box" v-for="data in expJson">
您还需要在所有 v-for
元素上使用 :key
。由于您的数据没有唯一标识符,我们可以使用索引:
<article class="content__box" v-for="(data, index) in expJson" :key="index">
此外,这仍然会报错,因为所有组件都必须具有 one root element,而 v-for
可能会创建多个根元素。您可以将所有内容包装在 div:
<template>
<div>
<article class="content__box" v-for="(data, index) in expJson" :key="index">
{{data.text}}
<h6>{{data.text}}</h6>
<h3>{{data.color}}</h3>
<p>{{data.size}}</p>
</article>
</div>
</template>