我可以从vue自定义指令中获得返回值吗?

时间:2018-09-14 05:49:03

标签: vue.js vue.js-directives

我写了制作谷歌地图的自定义指令。

Vue.directive('gmap', {
  inserted: function (el) {
    return new google.maps.Map(el, {
      center: { lat: -34.397, lng: 150.644 },
      zoom: 8
    })
  }
})

<div v-gmap ref="map" style="height: 360px"></div>

它可以正常工作,我可以看到地图。

然后,我想在地图上绘制标记,并且需要一个google maps对象。

我可以从v-gmap指令获取返回值吗?

mounted () {
    const map = this.$refs.map

    const marker = new google.maps.Marker({
      position: { lat: -34.397, lng: 150.644 },
      map: map,
      title: 'Hello World!'
    });
  }

它不起作用。

map只是HTML元素。

1 个答案:

答案 0 :(得分:0)

您应该为此创建一个组件而不是一个指令:

Vue.component('gmap', {
  template: '<div/>',

  mounted() {
    this.map = new google.maps.Map(this.$el, {
      center: { lat: -34.397, lng: 150.644 },
      zoom: 8,
    });

    const marker = new google.maps.Marker({
      map: this.map,
      position: { lat: -34.397, lng: 150.644 },
      title: 'Hello World!',
    });
  },
});
<gmap style="height: 360px"/>

当然,这只是一个开始。如果希望从组件外部控制标记,则可以通过道具传递标记。由您决定如何发挥作用。