数据()中的错误:“TypeError:无法读取未定义的属性‘length’”(Vue.js)
2019-03-12
5404
我是 Vue.js 的初学者,所以也许我犯了一个愚蠢的错误,但老实说,我不明白为什么我会得到这样的错误...... 你能帮我吗? 这里有一个代码: Javascript:
const bootstrap = require("./assets/bootstrap.png");
const bulma = require("./assets/bulma.png");
const css3 = require("./assets/css3.png");
const html5 = require("./assets/html5.png");
const illustrator = require("./assets/illustrator.png");
const js = require("./assets/js.png");
const photoshop = require("./assets/photoshop.png");
const vue = require("./assets/vue.png");
const webpack = require("./assets/webpack.png");
export default {
name: "app",
data() {
return {
images: [
bulma,
bootstrap,
css3,
html5,
illustrator,
js,
photoshop,
vue,
webpack
],
idx: Math.floor(Math.random() * this.images.length),
randomImage: this.images[this.idx]
};
}
};
和 HTML:
<div id="app">
<div id="myContainer">
<div id="nav">
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
</div>
<router-view />
<button v-on:click="animate">Test</button>
<img v-for="image in images" :src="image" />
</div>
</div>
data() 中的错误:“TypeError:无法读取未定义的属性‘length’”(Vue.js)!!! 据我所知,问题与 Math.floor(Math.random() * this.images.length) 有关。将来我想使用 randomPicture 来生成随机图片。
3个回答
当您使用此组件创建组件时:
export default {
name: "app",
data() {
return {
images: [
bulma,
bootstrap,
css3,
html5,
illustrator,
js,
photoshop,
vue,
webpack
],
idx: Math.floor(Math.random() * this.images.length),
randomImage: this.images[this.idx]
};
}
};
this.images
(或
this.idx
)尚未定义。您应该为
randomImage
设置一个值(如
null
),然后在
created
钩子上设置实际值:
export default {
name: "app",
data() {
return {
images: [
bulma,
bootstrap,
css3,
html5,
illustrator,
js,
photoshop,
vue,
webpack
],
idx: null,
randomImage: null
};
},
created() {
this.idx = Math.floor(Math.random() * this.images.length)
this.randomImage = this.images[this.idx]
}
};
Seblor
2019-03-12
您可以改用计算属性来像这样的数据变量:
export default {
name: "app",
data() {
return {
images: [
bulma,
bootstrap,
css3,
html5,
illustrator,
js,
photoshop,
vue,
webpack
],
};
},
computed: {
idx() {
return Math.floor(Math.random() * this.images.length);
},
randomImage() {
return this.images[this.idx];
},
},
};
此外,您只能在创建或安装组件后使用组件数据变量。
Ronin Kr
2019-03-12
当组件被挂载时你的数据是空的(因为你是异步获取的),所以你需要一个额外的保护。
Dhairya Senjaliya
2019-03-12