在data()方法中读取时,VueJS prop是未定义的

时间:2018-04-29 12:53:25

标签: javascript vue.js vuejs2 vue-component

我无法理解道具在VueJS中的工作原理,我们将非常感谢一些帮助。这是一个简单的谷歌地图组件,我希望在页面上显示并动态传递div的id元素作为底层模板的道具。

html文件 -

<div id="app">
    <google-map name="map"></google-map>
</div>

vue文件 -

<template>
    <div :id="mapName"></div>
</template>

<script>
module.exports = {
    name: 'google-map',
    props: [ 'name' ],
    data: () => {
        console.log(this.name); // ERROR: name is undefined
        return {
            mapName: this.name
        };
    },
    mounted: () => {
        const map = new google.maps.Map(document.getElementById(this.mapName), {
            zoom: 14,
            center: new google.maps.LatLng(39.305, -76.617)
        });
    }
}
</script>

<style scoped>
#map {
  width: 800px;
  height: 600px;
  margin: 0 auto;
  background: gray;
}
</style>

我得到的错误是组件对象的data()方法中未定义this.name

1 个答案:

答案 0 :(得分:8)

<button oncontextmenu="change(elm)"></button> 返回undefined的原因是你正在使用Arrow函数。它应该是

console.log(this.name);

data: function() {
    // ...
},

mounted: function() {
    // ...
}

<强>解释

请参阅https://vuejs.org/v2/guide/instance.html#Instance-Lifecycle-Hooks

enter image description here