Map.vue基于百度地图组件重构笔记分享


Posted in Javascript onApril 17, 2017

Map.vue是为iview组件开发的一个基于百度地图的组件,实现了点是否在框内的判断,画多边形覆盖物,添加自定义富文本标记物等功能.

第一步:重构自定义的富文本对象,设置为全局对象.

原代码的富文本对象是声明在addResource这个方法里面的,代码结构非常复杂,在beforeCreate这个钩子函数里面申明为全局的,就可以多次复用,不需要重复声明来了, 否则,每调用一次paintPolygon方法,都要重新声明一次,非常麻烦,效率太低下.

原代码是在父组件中处理好这个富文本对象需要的数据,再把这些数据传到富文本对象的构造函数里面,重构的处理方式,是将一整个数据对象(data对象)传到对象的构造函数里面,再根据需求,分解data对象来声明对象的属性(this._content | this._point | this._color等). 总结下来,数据总是应该在最靠近 使用数据的地方 进行处理.

window.ResOverlay = function(data, fun){ 
 this._data = data
 this._content = data['type'].name + "|" + data['name']
 this._point = new BMap.Point(data.coord[0], data.coord[1])
 this._fun = e => {
  fun(data)
  if(typeof(e.preventDefault()) == 'function'){
   e.preventDefault() // IE下去除地图点击事件的冒泡
  }else{
   e.stopPropagation() // chrome下去除地图点击事件的冒泡
  }
 }
 this._color = data['type'].color || "#5cadff" // 不同类型的资源有不同的颜色,默认颜色为#5cadff。
}

第二步:函数传递

需要为富文本添加电脑端的click事件和移动端的touchstart事件.涉及到要操作父组件中的data数据,所以采用将函数fun作为参数传入

父组件请求回数据再做处理,rep.data.data.resources为data,fun就是 data => {}

this.$http.get('/api/search').then(rep => {
  this.$refs.main.addResource(rep.data.data.resources, data => {
   this.resourceName = data["name"]
   this.resourceType = data["type"].name
   this.resourceUpdata = data["uploader"]
   this.resourcePosition = data["coord"]
   console.log(data["attachment"])

   let allList = []    
   data["attachment"].map(i => {
    let tempList = []     
    tempList.push(i)     
    tempList.push(i.split("/")[i.split("/").length - 1])
    allList.push(tempList)
   })

   this.resourceDetial = allList

   // 为资源添加图像
   for(let i=0; i<data["images"].length; i++){
    this.resourceImage.push(data["images"][i])
   }
   if (data["images"].length > 0){
    this.isExistImage = true
   }else{
    this.isExistImage = false
   }

   // 为资源添加附件    
   if (data["attachment"].length > 0){
    this.isExistAttach = true
   }else{
    this.isExistAttach = false
   }

   // 显示模态框    
   this.modal1 = true
  })
 })

在构造函数中,这样子处理

this._fun = e => {
 fun(data)
 if(typeof(e.preventDefault()) == 'function'){
  e.preventDefault() // IE下去除地图点击事件的冒泡
 }else{
  e.stopPropagation() // chrome下去除地图点击事件的冒泡
 }
}

最后,在合适的位置,添加事件

wrapDiv.addEventListener("touchstart", this._fun);
 wrapDiv.addEventListener("click", this._fun);

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

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

Javascript 相关文章推荐
Javascript 面向对象 继承
May 13 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
Oct 11 Javascript
理运用命名空间让js不产生冲突避免全局变量的泛滥
Jun 15 Javascript
jQuery学习总结之jQuery事件
Jun 30 Javascript
jquery 插件实现多行文本框[textarea]自动高度
Mar 04 Javascript
Javascript获取统一管理的提示语(message)
Feb 03 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
Oct 18 Javascript
jquery 手势密码插件
Mar 17 Javascript
详解Koa中更方便简单发送响应的方式
Jul 20 Javascript
JS实现处理时间,年月日,星期的公共方法示例
May 31 Javascript
Layui实现主窗口和Iframe层参数传递
Nov 14 Javascript
Vue路由权限控制解析
Nov 09 Javascript
JS简单验证上传文件类型的方法
Apr 17 #Javascript
JavaScript实现的商品抢购倒计时功能示例
Apr 17 #Javascript
巧用weui.topTips验证数据的实例
Apr 17 #Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
Apr 17 #jQuery
bootstrap select插件封装成Vue2.0组件
Apr 17 #Javascript
JS简单获取当前日期和农历日期的方法
Apr 17 #Javascript
Vue.js仿Metronic高级表格(一)静态设计
Apr 17 #Javascript
You might like
php检测useragent版本示例
2014/03/24 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
BOOM vs RR BO5 第三场 2.14
2021/03/10 DOTA
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
JavaScript 原型继承
2011/12/26 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
Javascript中判断对象是否为空
2015/06/10 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
vue滚动tab跟随切换效果
2020/06/29 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
python从入门到精通(DAY 3)
2015/12/20 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
Django model select的多种用法详解
2019/07/16 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
Django ORM filter() 的运用详解
2020/05/14 Python
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
餐饮收银员岗位职责
2014/02/07 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
校庆标语集锦
2014/06/25 职场文书
研修心得体会
2014/09/04 职场文书
学校财务管理制度
2015/08/04 职场文书
小学班长竞选稿
2015/11/20 职场文书
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技