javascript - 将 Google map 与 Vue.js 结合使用

标签 javascript vue.js

我正在学习 Vue,但遇到以下问题。

我正在使用 Google Maps API 点击定位自己。同样在启动时, map 应该像我构建它时的文档一样显示乌鲁鲁。这奏效了。在现场开始, map 打开并向我展示了乌鲁鲁。它也可以在 new Vue 对象之外工作。

问题是:当我将它放入 new Vue 对象时,它不起作用。没有控制台错误,没有什么可以告诉我出了什么问题。 map 只是保持空白。我猜问题出在我实际上没有调用该函数。

我的 HTML 是:

<div id="map">
</div>

脚本是这样采用的。我相信回调部分是问题所在,但我不知道如何解决。

<script src="https://maps.googleapis.com/maps/api/js?key= AIzaSyAL1riTbssWzSBtySctopB9I8wY_OXk0og &callback=initMap"></script>

我的 Vue 是这样的:

var appAlex = new Vue({
  el: "#root",
  methods: {
    /** Google maps
     * Init map function from Google Maps docs
     */
    initMap: function() {
      var place = {
        lat: -25.363,
        lng: 131.044
        // Barrie's location
        // lat: 44.4001,
        // lng: -79.666
      };
      map = new google.maps.Map(document.getElementById("map"), {
        // I made it a global so I can use it in out events
        zoom: 4,
        center: place
      });
      var marker = new google.maps.Marker({
        position: place,
        map: map
      });
    },
    findMe: function() {
      appAlex.getInfo(appAlex.Url).then(ipInfo => {
        // ipInfo;
        let lattitude = ipInfo.loc.slice(0, 7);
        let lng = ipInfo.loc.slice(8, 15);
        let place = {
          lat: parseFloat(lattitude),
          lng: parseFloat(lng)
        };
        map.setCenter({
          lat: place.lat,
          lng: place.lng
        });
        map.setZoom(13);

        // Making the cursor move to a new location.
        let marker = new google.maps.Marker({
          position: place,
          map: map
        });
      });
    }
  }
})

可能有很多糟糕的文体错误,我也很乐意听到这些错误。正如我所说,这是我的第一个 Vue 应用程序,所以我不太了解它。

总结一下:

InitMap 函数在锁定在 Vue 对象中时未被调用。

我找到了 this post ,和我的很像,但是完全看不懂。

我的脚本调用是这样的:

<footer>
  <script src="./appAlex.js"></script>
  <script src="./appSarah.js"></script>
  <script src="https://maps.googleapis.com/maps/api/js?key= AIzaSyAL1riTbssWzSBtySctopB9I8wY_OXk0og &callback=appAlex.initMap"></script>
</footer>

我尝试在 initMap 前使用和不使用 appAlex,但没有成功。

最佳答案

你的代码有几个问题:

  • 您定义了方法,但从未调用它们。如果你想在实例挂载时使用一个方法(参见 vue 生命周期钩子(Hook)引用 here ),在 mounted() 中调用它 Hook

  • 您不需要在 methods 属性中声明 initMap。

  • 如果您想在用户点击 <div id="map"> 时执行某些操作, 改为 <div id="map" @click="findMe"> .它是 v-on:click 的简写,检测用户何时点击元素。

代码示例(未测试但应该没问题):

let map = null;
function initMap() {
  const place = {
    lat: -25.363,
    lng: 131.044
    // Barrie's location
    // lat: 44.4001,
    // lng: -79.666
  };
  map = new google.maps.Map(document.getElementById("map"), {
    // I made it a global so I can use it in out events
    zoom: 4,
    center: place
  });
  const marker = new google.maps.Marker({
    position: place,
    map,
  });
}

var appAlex = new Vue({
  el: "#root",
  mounted() {
    // do something after mounting vue instance
    initMap();
  },
  methods: {
    findMe() {
      appAlex.getInfo(appAlex.Url).then((ipInfo) => {
        // ipInfo;
        const lattitude = ipInfo.loc.slice(0, 7);
        const lng = ipInfo.loc.slice(8, 15);
        const place = {
          lat: parseFloat(lattitude),
          lng: parseFloat(lng)
        };
        map.setCenter({
          lat: place.lat,
          lng: place.lng
        });
        map.setZoom(13);

        // Making the cursor move to a new location.
        const marker = new google.maps.Marker({
          position: place,
          map,
        });
      });
    }
  }
})

关于javascript - 将 Google map 与 Vue.js 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48093450/

相关文章:

javascript - 将值从弹出窗口 ('open' ) 发送到 'popupbeforeposition'

javascript - Express & Jade,向布局添加代码的模板

Javascript - 在文件上传期间防止导航

javascript - 由于 MIME 类型,我的 html 出现错误

javascript - vuejs 如何绑定(bind) id 到 ajax 请求 url?

javascript - 将日期(yyyy-mm-dd)转换为 yyyy MMM dd javascript

javascript - puppeteer 按钮单击后等待页面更新(无导航)

javascript - 如何让流程将两种字符串类型视为不兼容?

vue.js - Vue 如何在具有父级和自身的组件上设置属性? [警告]

javascript - Vue Js - 单击触发方法时从表中删除 TR 祖父节点