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中Math对象使用说明
Jan 16 Javascript
JS中toFixed()方法引起的问题如何解决
Nov 20 Javascript
Javascript事件实例详解
Nov 06 Javascript
jQuery中:last-child选择器用法实例
Dec 31 Javascript
jquery自定义表单验证插件
Oct 12 Javascript
微信小程序开发之IOS和Android兼容的问题
Sep 26 Javascript
Vue实现内部组件轮播切换效果的示例代码
Apr 07 Javascript
elementUI 动态生成几行几列的方法示例
Jul 11 Javascript
js实现多张图片每隔一秒切换一张图片
Jul 29 Javascript
对vue中的事件穿透与禁止穿透实例详解
Oct 28 Javascript
小程序跨页面交互的作用与方法详解
Jan 07 Javascript
解决ant Design Search无法输入内容的问题
Oct 29 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多个文件上传到服务器实例
2014/10/29 PHP
ThinkPHP3.2框架操作Redis的方法分析
2019/05/05 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
javascript常用的方法整理
2015/08/20 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析
2017/11/27 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
理解Python中的绝对路径和相对路径
2017/08/30 Python
浅谈Python peewee 使用经验
2017/10/20 Python
Python实现微信小程序支付功能
2019/07/25 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
读群众路线心得体会
2014/03/07 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
个人合伙协议书范本
2014/10/14 职场文书
毕业实习计划书
2015/01/16 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python