当前位置: 首页 > 知识库问答 >
问题:

javascript - 问题:求教,如何正确在vue中引入地图amap组件?

胡墨竹
2024-04-18

问题:求教,如何正确在vue中引入地图amap组件?
问题描述:

我按照amap文档的步骤,尝试在引入的地图上设置定位按钮时出错。在不断改正后仍然没有结果,在网上寻找答案也没找到符合情况的解决方案,(我是新手,对很多配置操作不太了解,不知道哪里出错了)。

问题截图:
image.png

vue块代码:

<template>  <!-- 地图容器大小 -->  <div class="amap-wrap">    <!-- <div class="amap-page-container"> -->      <!-- 载入地图 -->      <el-amap        id="amapContainer"        :zoom="zoom"        :events="events"        class="amap-demo"      >        <!-- 定位插件 -->        <el-amap-control-geolocation :visible="visible" @complete="getLocation">        </el-amap-control-geolocation>      </el-amap>      <div class="toolbar">        <button @click="switchVisible()">          {{ visible ? "隐藏" : "显示" }}        </button>      </div>    <!-- </div> -->  </div></template>    <script>  //引入组件//import VueAMap from 'vue-amap';import { lazyAMapApiLoaderInstance} from "vue-amap";export default {  name: "MyComponent",  //组件定义  components:  {    //'el-amap':VueAMap.AMap,   'el-amap-control-geolocation': VueAMap.getLocation,  },  // 数据 方法  data() {    return {      map: null,      zoom: 17,      events: {},      visible: true,    };  },  methods: {    switchVisible() {      this.visible = !this.visible;    },    getLocation(e) {      console.log("getLocation: ", e);    },  },  mounted() {    //加载高德地图的API    lazyAMapApiLoaderInstance.load().then(() => {      this.map = new window.AMap.Map("amapContainer", {        center: new window.AMap.LngLat(121.530072, 31.24053),        zoom: this.zoom,      });      var marker = new window.AMap.Marker({        map: this.map,        //光点图标        icon: "https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png",        position: [121.530072, 31.24053],      });      marker.setMap(this.map);    });  },};</script><!--   -->  <style scoped>.amap-wrap {  height: 100%;}.amap-demo {  height: 

main.js代码:

import Vue from 'vue'import App from './App.vue'import router from './router'// ------//// 引入 element ui 组件目录import ElementUI from 'element-ui';import 'element-ui/lib/theme-chalk/index.css';//------//// 引入 vueAMap  组件目录import VueAMap from 'vue-amap';//import VueAMap from '@vuemap/vue-amap'Vue.config.productionTip = false//使用ElementUI 组件Vue.use(ElementUI);//使用VUeAMap 组件Vue.use(VueAMap);////Vue.use(ElAmapControlGeolocation);//引入地图所需插件VueAMap.initAMapApiLoader({  key: '522c38a157a79039e70cd2a3e41d03c1',  //引入的插件  plugin: [ "AMap.getLocation","AMap.AMap",],  //版本号  v: '1.4.4',  uiVersion: '1.0' // 版本号});window._AMapSecurityConfig ={ securityJsCode:'bc492f3261717a214ce01902b8c941ce'}//------//new Vue({  router,  render: h => h(App)}).$mount('#app')

eslintrc.js配置:

module.exports = {    "env": {        "commonjs": true,        "es6": true,        "node": true    },    "extends": "eslint:recommended",    "parserOptions": {        "ecmaVersion": 2018    },    "rules": {        "indent": [            "error",            4        ],        "linebreak-style": [            "error",            "unix"        ],        "quotes": [            "error",            "double"        ],        "semi": [            "error",            "always"        ],        }    ,    globals: {        'AMap': true,        'AMapUI': true      }}这里面还有类似于 必须引入Vue.AMap, 但必须加window.前缀的问题,以及组件无法识别的问题。不知道该怎么改。

共有1个答案

段干安和
2024-04-18

在Vue中引入高德地图的amap组件,你需要注意以下几点:

  1. 确保你已经正确安装并引入了vue-amap
  2. main.js文件中正确初始化VueAMap
  3. 在你的组件中,你需要确保正确引用了el-amapel-amap-control-geolocation组件。

下面是一个修改后的代码示例,你可以参考这个示例来调整你的代码:

main.js:

import Vue from 'vue'import App from './App.vue'import router from './router'import ElementUI from 'element-ui';import 'element-ui/lib/theme-chalk/index.css';import VueAMap from 'vue-amap';Vue.config.productionTip = falseVue.use(ElementUI);Vue.use(VueAMap);VueAMap.initAMapApiLoader({  key: '你的高德地图API Key',  plugin: ['AMap.Geolocation'], // 只引入需要的插件  v: '1.4.15'});new Vue({  router,  render: h => h(App)}).$mount('#app')

你的组件:

<template>  <div class="amap-wrap">    <el-amap      id="amapContainer"      :zoom="zoom"      :events="events"      class="amap-demo"      :vid="'amap_' + randomId" <!-- 添加一个唯一的vid,避免多个地图实例冲突 -->    >      <el-amap-control-geolocation        :button-position="'RB'"        :show-button="true"        :show-circle="true"        :pan-to-location="true"        :zoom-to-accuracy="true"        @click="handleGeolocation"      ></el-amap-control-geolocation>    </el-amap>  </div></template><script>export default {  name: "MyComponent",  data() {    return {      zoom: 17,      events: {},      randomId: Math.random().toString(36).substr(2, 9), // 生成随机ID,确保vid唯一    };  },  methods: {    handleGeolocation(e) {      console.log("定位成功", e);    },  },};</script><style scoped>.amap-wrap {  height: 100%;}.amap-demo {  height: 100%;}</style>

请注意以下几点:

  • main.js中,我移除了plugin数组中的AMap.AMap,因为vue-amap已经默认包含了AMap的基础功能。我只保留了AMap.Geolocation,这是定位插件。
  • 在你的组件中,我为el-amap添加了一个:vid="'amap_' + randomId"属性。这是为了确保每个地图实例都有一个唯一的ID,避免多个地图实例之间的冲突。
  • 我还为el-amap-control-geolocation添加了一些属性,如:button-position, :show-button, :show-circle等,你可以根据需要进行调整。
  • el-amap-control-geolocation上,我添加了一个@click事件监听器handleGeolocation,当点击定位按钮时,会调用这个方法并打印定位结果。你可以在这个方法中添加你需要的定位逻辑。

希望这个示例能帮助你解决问题!如果你还有其他问题或需要进一步的帮助,请随时提问。

 类似资料:
  • 为什么在Vscode还是不能正确引入vue 求大佬帮帮孩子

  • 页面路由是这样: 简单点说就是访问/#/preview/123页面 preview=>chart(动态组件)=>Container=>=preview 报错如下: chatGPT回答如下: 这个错误通常是由于组件之间的递归调用导致的。 在你的代码中,Preview组件中渲染了一个Chart组件,Chart组件又渲染了一个动态组件 <component :is="item.type" :item="

  • 问题内容: 例如,我有一个带有两种绑定方法的react组件: 在上面的代码中,我有两种绑定方法:一种是和一种是。功能有效,但无效。运行时,它返回错误: TypeError:无法读取未定义的属性“ handleRemoveComment” 问题答案: 问题在于这条线: 因为您忘记了绑定,映射回调方法,所以inside 方法将不会引用类上下文。 使用这些解决方案中的 任何一种 ,它将起作用。 1- 在

  • vue-amap 是饿了么开源的一套基于 Vue 2.0 和高德地图的地图组件。 数据状态与地图状态单向绑定 开发者无需关心地图的具体操作 安装 npm install -S vue-amap 快速上手 引入vue-amap // 引入vue-amapimport VueAMap from 'vue-amap';Vue.use(VueAMap);// 初始化vue-amapVueAMap.init

  • 我试图通过手动将图像拖到eclipse或导入来解决这个问题。但正如下图所示,这些图像总是碰巧是一个文本文件。请帮忙! 放大,你可以看到导入的图像是一个文本文件,在这里输入图像描述 当我打开它: 在此输入图像描述

  • 问题内容: 我有一个包含人类地图的阶级 世界 。如果将类世界编组,则会得到以下输出: 但我不想显示“值”标签。它应该看起来像: 这可能吗? 这是世界和人类的代码: 问题答案: 正如所指出的ilcavero一个可用于在JAXB申请的替代映射到地图(或任何类型的)。下面是一个具体示例的链接: http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secre