Vue.js 设置组件数据

Posted

技术标签:

【中文标题】Vue.js 设置组件数据【英文标题】:Vue.js set component data 【发布时间】:2018-06-29 12:46:22 【问题描述】:

我有一个 Map.vue 组件,我想更改它的数据。但是我不知道如何在 Vue.js 中做到这一点:

<template>
  <div>
    <div class="google-map" :id="mapName">
    </div>
  </div>
</template>
<script>
export default 
  name: 'google-map',
  props: ['name'],
  methods: 
    updateCurrentPosition()
      navigator.geolocation.getCurrentPosition((position) => 
        this.$data.currentLocation = 
          lat: position.coords.latitude,
          lng: position.coords.longitude
        ;
        console.log("After setting, This.currentLocation = ");
        console.log(this.$data.currentLocation);

        this.map.panTo(new google.maps.LatLng(this.$data.currentLocation.lat, this.$data.currentLocation.lng));
        this.map.setZoom(18);
      );      
    ,  

    initializeMap()
      this.updateCurrentPosition(); 

      console.log("Before Marker, This.currentLocation = ");
      console.log(this.$data.currentLocation);

      this.addMarker(this.$data.currentLocation);
    ,

    addMarker(LatLngObj)
      console.log("In addMarker This.currentLocation = ");
      console.log(this.$data.currentLocation);  

      var marker =  new google.maps.Marker(
        position: new google.maps.LatLng(LatLngObj.lat, LatLngObj.lng),
        map:this.map,
        icon:'http://www.magic-emoji.com/emoji/images/619_emoji_iphone_ok_hand_sign.png'
      );
    
  ,
  data: function () 
    return 
      mapName: this.name + "-map",
      markerCoordinates: [
        latitude: 51.501527,
        longitude: -0.1921837
      , 
        latitude: 51.505874,
        longitude: -0.1838486
      , 
        latitude: 51.4998973,
        longitude: -0.202432
      ],
      map: null,
      bounds: null,
      markers: [], 
      currentLocation:
    
  ,

this.$data.currentLocation 在 updateCurentPosition() 中有一个正确的值,但是一旦超出这个函数,它就只是一个空白对象。如何设置它的值以便从其他功能访问它?

【问题讨论】:

请定义你所说的外部是什么意思? 当我在 updateCurentPosition() 中打印 this.$data.currentLocation 时,该对象有一个 Lat 和 Lng。但是当我设置它后在另一个函数(外部)中打印它时,打印显示一个空白对象。 引用时不要使用$data。只是this.currentLocation 我还是有问题,this.currentLocation 在 updateCurentPosition() 中有正确的 lat & lng,但是当我在另一个函数中打印时它仍然是空白的。 另一个函数在哪里,它使用什么句柄代替this 来获取相同的组件实例?有什么办法可以将其提炼成mcve? 【参考方案1】:

使用this.currentLocation 代替this.$data.currentLocation

你被 data () return currentLocation: null 对象弄糊涂了,它告诉 vuejs 在他的反应系统中添加 currentLocation

但是这个数据对象中定义的所有属性都可以被this直接访问。

【讨论】:

以上是关于Vue.js 设置组件数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将 vue.js 中的子组件设置为“默认”

当我在 Vue JS 中按下父组件上的按钮时如何刷新子组件?

Vue.js 子组件未更新

Vue.js 和 vue-phone-number-input 包组件:以编程方式设置国家代码和电话号码

vue.js 使用keep-alive设置返回不刷新

vue.js组件改变了数据,但是dom并没有刷新