vue 使用高德地图vue-amap组件过程解析


Posted in Javascript onSeptember 07, 2019

这篇文章主要介绍了vue 使用高德地图vue-amap组件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

首先

npm install -S vue-amap

然后在 main.js

import VueAMap from 'vue-amap'; //注意不要和 AMap原始名称覆盖
Vue.use(VueAMap);
// 初始化vue-amap
VueAMap.initAMapApiLoader({
 // 高德的key
 key: 'you key',
 // 插件集合
 plugin: ['AMap.Autocomplete', 'AMap.PlaceSearch', 'AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PolyEditor', 'AMap.CircleEditor','AMap.Geolocation'],
 v: '1.4.4'
});

map.vue文件

其中有个BUS.js,是基于观察者模式的发布订阅封装

<template>
  <div class="_map">
    <div class="amap-page-container">
      <el-amap-search-box class="search-box" :search-option="searchOption" :on-search-result="onSearchResult" ></el-amap-search-box>
     <el-amap ref="map" vid="amapDemo" :plugin="plugin" :zoom="zoom" :center="center" class="amap-demo" :events="events">
      <el-amap-marker vid="component-marker" :position="makerConf.position" :content="makerConf.content" ></el-amap-marker>
     </el-amap>
    </div>
    <div class="adrs">
      <ul>
        <li class="" v-for="(item,index) in list" :key="index" :class="currIndex == index ? 'active':''" @click="select(item,index)">
          <p class="address">{{item.address}}</p>
          <p class="nm">{{item.name}}</p>
        </li>
      </ul>
    </div>
  </div>
 </template>
 
 <style>
  .amap-page-container{
    height: 300px;
    position: relative;
  }
  .search-box {
   position: absolute !important;
   top: 25px;
   left: 20px;
   z-index: 200 !important;
  }
  .amap-demo {
   height: 300px;
  }
  .amap-logo {
      display: none;
   }
  .amap-copyright {
     bottom:-100px;
      display: none;
  } 
  .amap-scalecontrol{
    bottom: 4px !important;
  }
  .amap-geolocation-con{
    bottom: 30px !important;
    z-index: 199 !important;
  }
  ul li.active{
    color: deeppink;
  }
 </style>
 <script>   
  export default {
   name: 'amap-page',
   components: {},
   data() {
    var me = this;
    me.city = me.city || '武汉';
    return {
     list:[], 
     currIndex:0,
     zoom: 16,
     center: [114.397169, 30.50576],
     events:{
       init: (o) => {
       o.setCity(me.city,result => {
        console.log("----------setCity",result);
        if(result && result.length > 0){
          me.zoom = 16;
          me.makerConf.position = result;
          me.getList(result);
        }
       });
       //去掉logo
       document.getElementsByClassName("amap-logo")[0].style.display = "none";
      },
      "dragend":function(e){
        //console.log("dragging",e,this.getCenter());
        var point = this.getCenter();
        var pos = [point.lng,point.lat];
        me.makerConf.position = [point.lng,point.lat];
        me.getList(pos);
      }
     },
     makerConf: {
      position: [114.397169, 30.50576],
      content:""
     },
     searchOption: {
      city: me.city,
      citylimit: true
     },
     plugin:[
      'ToolBar',
      'Scale',
      {
      pName: 'Geolocation',
      events: {
       init(o) {
        
       },
       complete:function(result){
        //定位成功
        var address = result.formattedAddress
        var point = result.position;
        var obj = {
          address:address,
          name:"",
          location:point
        }
        me.list = [obj];
        me.makerConf.position = [point.lng,point.lat];
       },
       error:function(){
         
       }
      }
     }
     ]
    };
   },
   created(){
    var me = this; 
   },
   mounted(){   
   },
   methods: {
    select:function(item,index){
      var me = this;
      me.currIndex = index;
      var point = item.location;
      me.makerConf.position = [point.lng,point.lat];
      me.center = [point.lng,point.lat];
       
    },
    //this.$refs.map.$$getCenter()
    getList:function(result){
      //获取列表
      var me = this;
      me.$Geocoder({
        lnglatXY:result,
        success:function(res){
          if(res.regeocode && res.regeocode.pois){
            me.list = res.regeocode.pois;
          }else{
            me.list = [];
          }
        },
        error:function(res){
          me.list = [];
        }
      });
     
    },
    onSearchResult(pois) {
      //搜索
     let latSum = 0;
     let lngSum = 0;
     var me = this;
     
     var mymap = me.$refs.map.$$getInstance();
       
     if (pois && pois.length > 0) {
       
      //如果长度为1则无需转化
        var poi = pois[0];
        var lng = poi["lng"];
        var lat = poi["lat"];
        me.center = [lng, lat];
        me.makerConf.position = [lng, lat];
        //me.makerConf.content = poi.name;
        me.list = pois;
      }else{
        me.list = [];
      }
    },   
    $Geocoder(options){
      //将坐标点转化为,详细地址
      options = options || {};
      if(AMap){
        AMap.plugin(['AMap.Geocoder'], () => {
        const geocoder = new AMap.Geocoder({
          radius: options.radius || 1000,
          extensions: options.extensions || "all"
        })
        var lnglatXY = options.lnglatXY || [114.397169, 30.50576]; //已知点坐标
        geocoder.getAddress(lnglatXY, function(status, result) {
          if (status === 'complete' && result.info === 'OK') {
            options.success && options.success(result);
          }else{
            options.error && options.error(status,result);
          }
        });
        });
         
      }
       
     }
    },
    "watch":{
     list:function(){
      this.currIndex = 0;
     }
    }
    
  };
   
  /*
   me.$Geocoder({
          lnglatXY:[center.lng, center.lat],
          success:function(res){
            console.log(res);
          }
    });
   *
   * */
</script>

bus.js

let instance = null;
class EventBus {
  constructor() {
    if (!instance) {
      this.events = {};
      instance = this;
    }
    return instance;
  }
  $emit(event, message) {
    if (!this.events[event])
      return;
    const callbacks = this.events[event];
    for (let i = 0, l = callbacks.length; i < l; i++) {
      const callback = callbacks[i];
 
      callback.call(this, message);
    }
  }
  $on(event, callback) {
    if (!this.events[event])
      this.events[event] = [];
 
    this.events[event].push(callback);
  }
}
export default new EventBus();

效果图

vue 使用高德地图vue-amap组件过程解析

https://elemefe.github.io/vue-amap/#/zh-cn/introduction/install

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript Event学习第十章 一些可替换的事件对
Feb 10 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
Jul 27 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
Jan 09 Javascript
jQuery 选择同时包含两个class的元素的实现方法
Jun 01 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
Aug 03 Javascript
JS刷新父窗口的几种方式小结(推荐)
Nov 09 Javascript
BootStrapTable服务器分页实例解析
Dec 20 Javascript
Bootstarp 基础教程之表单部分实例代码
Feb 03 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
Jul 27 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
Apr 17 Javascript
浅谈vuex中store的命名空间
Nov 08 Javascript
node事件循环和process模块实例分析
Feb 14 Javascript
vue 的 solt 子组件过滤过程解析
Sep 07 #Javascript
javascript的惯性运动实现代码实例
Sep 07 #Javascript
vue的滚动条插件实现代码
Sep 07 #Javascript
微信小程序页面滚动到指定位置代码实例
Sep 07 #Javascript
通过vue写一个瀑布流插件代码实例
Sep 07 #Javascript
javascript写一个ajax自动拦截并下载数据代码实例
Sep 07 #Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
Sep 06 #Javascript
You might like
11个PHP 分页脚本推荐
2011/08/15 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
简单的自定义php模板引擎
2016/08/26 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
农历与西历对照
2006/09/06 Javascript
FireFox中textNode分片的问题
2007/04/10 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
js对象内部访问this修饰的成员函数示例
2014/04/27 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
2016/01/18 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
canvas知识总结
2017/01/25 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
vue路由切换时取消之前的所有请求操作
2020/09/01 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
python魔法方法-自定义序列详解
2016/07/21 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
Python wxPython库使用wx.ListBox创建列表框示例
2018/09/03 Python
python+flask实现API的方法
2018/11/21 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
你可能不知道的Python 技巧小结
2020/01/29 Python
Python中zip函数如何使用
2020/06/04 Python
python numpy库np.percentile用法说明
2020/06/08 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
幼儿园小班家长寄语
2014/04/02 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python