Vue 属性 定义警告,即使它是在实例上定义的
Vue property definition warning even though it is defined on the instance
编辑 - 我已经在 github 上设置了一个回购协议,这里有错误的代码,如果有人想把它拉下来并自己查看错误的话:https://github.com/andrewjrhill/what-the-instance-grid.您可以 运行 npm run serve
启动网络服务器。
我 运行 遇到一个问题,我的 Vue 抛出以下错误:
[Vue warn]: Property or method "columns" 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.
[Vue warn]: Property or method "items" 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.
这是 Vue 应用程序的一个非常常见的问题,通常是 属性 未在 Vue 数据对象上定义的结果。不幸的是,在这种情况下,我确实在新的 Vue 调用中添加了 columns
和 items
。为什么我会收到此错误的任何想法?模板似乎根本没有数据可用。
这个项目是由最新的 Vue-CLI 生成的,并且在 vue.config.js
文件中使用 runtimeCompiler: true
标志,如果这有任何区别的话。
有问题的 .vue
文件:
<template>
<div id="vueapp" class="vue-app">
<Grid :columns="columns" :data-items="items" :style="{ height: '280px' }"></Grid>
</div>
</template>
<script>
import Vue from "vue";
import { Grid } from "@progress/kendo-vue-grid";
Vue.component("Grid", Grid);
new Vue({
el: "#vueapp",
data: function() {
return {
items: [],
columns: [
{ field: "ProductID" },
{ field: "ProductName", title: "Product Name" },
{ field: "UnitPrice", title: "Unit Price" }
]
};
},
methods: {
createRandomData(count) {
const productNames = [
"Chai",
"Chang",
"Syrup",
"Apple",
"Orange",
"Banana",
"Lemon",
"Pineapple",
"Tea",
"Milk"
];
const unitPrices = [12.5, 10.1, 5.3, 7, 22.53, 16.22, 20, 50, 100, 120];
return Array(count)
.fill({})
.map((_, idx) => ({
ProductID: idx + 1,
ProductName:
productNames[Math.floor(Math.random() * productNames.length)],
UnitPrice: unitPrices[Math.floor(Math.random() * unitPrices.length)]
}));
}
},
mounted() {
this.items = this.createRandomData(50);
}
});
export default {
name: "App",
components: {
Grid
}
};
</script>
不要在 App.vue 组件内重新实例化 Vue。
像这样修复(来自你的 repo 的文件):
main.js:
import App from './App.vue'
import Vue from 'vue'
import { Grid } from "@progress/kendo-vue-grid";
Vue.component("Grid", Grid);
Vue.config.productionTip = false
new Vue({
render: h => h(App),
}).$mount('#vueapp')
App.vue:
<template>
<div id="vueapp" class="vue-app">
<Grid :columns="columns" :data-items="items" :style="{ height: '280px' }"></Grid>
</div>
</template>
<script>
export default {
name: "App",
data: function() {
return {
items: [],
columns: [
{ field: "ProductID" },
{ field: "ProductName", title: "Product Name" },
{ field: "UnitPrice", title: "Unit Price" }
]
};
},
methods: {
createRandomData(count) {
// your code
}
},
mounted() {
this.items = this.createRandomData(50);
}
};
</script>
编辑 - 我已经在 github 上设置了一个回购协议,这里有错误的代码,如果有人想把它拉下来并自己查看错误的话:https://github.com/andrewjrhill/what-the-instance-grid.您可以 运行 npm run serve
启动网络服务器。
我 运行 遇到一个问题,我的 Vue 抛出以下错误:
[Vue warn]: Property or method "columns" 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.
[Vue warn]: Property or method "items" 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.
这是 Vue 应用程序的一个非常常见的问题,通常是 属性 未在 Vue 数据对象上定义的结果。不幸的是,在这种情况下,我确实在新的 Vue 调用中添加了 columns
和 items
。为什么我会收到此错误的任何想法?模板似乎根本没有数据可用。
这个项目是由最新的 Vue-CLI 生成的,并且在 vue.config.js
文件中使用 runtimeCompiler: true
标志,如果这有任何区别的话。
有问题的 .vue
文件:
<template>
<div id="vueapp" class="vue-app">
<Grid :columns="columns" :data-items="items" :style="{ height: '280px' }"></Grid>
</div>
</template>
<script>
import Vue from "vue";
import { Grid } from "@progress/kendo-vue-grid";
Vue.component("Grid", Grid);
new Vue({
el: "#vueapp",
data: function() {
return {
items: [],
columns: [
{ field: "ProductID" },
{ field: "ProductName", title: "Product Name" },
{ field: "UnitPrice", title: "Unit Price" }
]
};
},
methods: {
createRandomData(count) {
const productNames = [
"Chai",
"Chang",
"Syrup",
"Apple",
"Orange",
"Banana",
"Lemon",
"Pineapple",
"Tea",
"Milk"
];
const unitPrices = [12.5, 10.1, 5.3, 7, 22.53, 16.22, 20, 50, 100, 120];
return Array(count)
.fill({})
.map((_, idx) => ({
ProductID: idx + 1,
ProductName:
productNames[Math.floor(Math.random() * productNames.length)],
UnitPrice: unitPrices[Math.floor(Math.random() * unitPrices.length)]
}));
}
},
mounted() {
this.items = this.createRandomData(50);
}
});
export default {
name: "App",
components: {
Grid
}
};
</script>
不要在 App.vue 组件内重新实例化 Vue。
像这样修复(来自你的 repo 的文件):
main.js:
import App from './App.vue'
import Vue from 'vue'
import { Grid } from "@progress/kendo-vue-grid";
Vue.component("Grid", Grid);
Vue.config.productionTip = false
new Vue({
render: h => h(App),
}).$mount('#vueapp')
App.vue:
<template>
<div id="vueapp" class="vue-app">
<Grid :columns="columns" :data-items="items" :style="{ height: '280px' }"></Grid>
</div>
</template>
<script>
export default {
name: "App",
data: function() {
return {
items: [],
columns: [
{ field: "ProductID" },
{ field: "ProductName", title: "Product Name" },
{ field: "UnitPrice", title: "Unit Price" }
]
};
},
methods: {
createRandomData(count) {
// your code
}
},
mounted() {
this.items = this.createRandomData(50);
}
};
</script>