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 相关文章推荐
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
Feb 05 Javascript
jQuery焦点图轮播特效代码分享(3款)
Sep 05 Javascript
原生js实现类似fullpage的单页/全屏滚动
Jan 22 Javascript
angular实现spa单页面应用实例
Jul 10 Javascript
vue axios同步请求解决方案
Sep 29 Javascript
vue.js项目中实用的小技巧汇总
Nov 29 Javascript
Webpack优化配置缩小文件搜索范围
Dec 25 Javascript
尝试自己动手用react来写一个分页组件(小结)
Feb 09 Javascript
jquery ajax加载数据前台渲染方式 不用for遍历的方法
Aug 09 jQuery
vue.js2.0 实现better-scroll的滚动效果实例详解
Aug 13 Javascript
JavaScript继承的特性与实践应用深入详解
Dec 30 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
Sep 27 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
谈谈新手如何学习PHP 默默经典版本
2009/08/04 PHP
PHP静态成员变量和非静态成员变量详解
2017/02/14 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
2015/10/23 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
如何用Python破解wifi密码过程详解
2019/07/12 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
Django如何实现防止XSS攻击
2020/10/13 Python
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
三维科技面试题
2013/07/27 面试题
关于Java finally的面试题
2016/04/27 面试题
经济管理专业毕业生推荐信
2013/11/11 职场文书
廉洁自律承诺书
2014/03/27 职场文书
节约粮食标语
2014/06/18 职场文书
房屋转让协议书
2014/10/18 职场文书
灵魂歌王观后感
2015/06/17 职场文书