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 function对象那些迷惑分析
Oct 24 Javascript
JavaScript实现多维数组的方法
Nov 20 Javascript
JQUERY 设置SELECT选中项代码
Feb 07 Javascript
Node.js实现Excel转JSON
Apr 24 Javascript
javascript实现的图片切割多块效果实例
May 07 Javascript
基于Bootstrap实现tab标签切换效果
Apr 15 Javascript
JavaScript地理位置信息API
Jun 11 Javascript
原生js实现中奖信息无间隙滚动效果
Jan 18 Javascript
利用angularjs1.4制作的简易滑动门效果
Feb 28 Javascript
JavaScript中重名的函数与对象示例详析
Sep 28 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
Nov 30 Javascript
关于Vue中$refs的探索浅析
Nov 05 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
Session的工作方式
2006/10/09 PHP
非常不错的MySQL优化的8条经验
2008/03/24 PHP
队列在编程中的实际应用(php)
2010/09/04 PHP
php猜单词游戏
2015/09/29 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
php文件包含的几种方式总结
2019/09/19 PHP
javascript 弹出层组件(升级版)
2011/05/12 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
js中的面向对象之对象常见创建方法详解
2019/12/16 Javascript
Python中的元类编程入门指引
2015/04/15 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
Python封装原理与实现方法详解
2018/08/28 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
使用jupyter notebook直接打开.md格式的文件
2020/04/10 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
求职意向书
2014/07/29 职场文书
海底两万里读书笔记
2015/06/26 职场文书
七年级思品教学反思
2016/02/20 职场文书
分析Python list操作为什么会错误
2021/11/17 Python