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 在各个浏览器中执行的耐性
Apr 06 Javascript
jQuery html()方法使用不了无法显示内容的问题
Aug 06 Javascript
Javascript中3个需要注意的运算符
Apr 02 Javascript
基于jquery实现省市联动效果
Nov 23 Javascript
全面总结Javascript对数组对象的各种操作
Jan 22 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
Jun 20 Javascript
解析Vue 2.5的Diff算法
Nov 28 Javascript
JS引用传递与值传递的区别与用法分析
Jun 01 Javascript
详解js根据百度地图提供经纬度计算两点距离
May 13 Javascript
VUE实现强制渲染,强制更新
Oct 29 Javascript
javascript canvas检测小球碰撞
Apr 17 Javascript
解决pycharm双击但是无法打开的情况
Oct 31 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
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
2011/07/29 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
2017/06/21 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
JavaScript 用Node.js写Shell脚本[译]
2012/09/20 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
js/jquery获取文本框输入焦点的方法
2014/03/04 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
2019/09/14 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
Python读大数据txt
2016/03/28 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
Python页面加载的等待方式总结
2021/02/28 Python
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
商场促销活动总结
2014/07/10 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
简易离婚协议书(范本)
2014/10/25 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
软件项目经理岗位职责
2015/04/01 职场文书
为什么mysql字段要使用NOT NULL
2021/05/13 MySQL
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL