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 相关文章推荐
js 禁用浏览器的后退功能的简单方法
Dec 10 Javascript
读jQuery之九 一些瑕疵说明
Jun 21 Javascript
javascript学习笔记(五) Array 数组类型介绍
Jun 19 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
Nov 18 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
Feb 27 Javascript
微信小程序如何获知用户运行小程序的场景教程
May 17 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
May 24 Javascript
详解前端路由实现与react-router使用姿势
Aug 07 Javascript
vue之debounce属性被移除及处理详解
Nov 13 Javascript
ant-design-vue按需加载的坑的解决
May 14 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
Sep 02 Javascript
LayUI+Shiro实现动态菜单并记住菜单收展的示例
May 06 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 session安全问题分析
2011/06/24 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
PHP页面间参数传递的四种方法详解
2013/06/09 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
JavaScript中的Window窗口对象
2008/01/16 Javascript
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
推荐JavaScript实现继承的最佳方式
2014/11/11 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
jquery实现可关闭的倒计时广告特效代码
2015/09/02 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
Jquery异步上传文件代码实例
2019/11/13 jQuery
微信小程序tabBar设置实例解析
2019/11/14 Javascript
在Django的通用视图中处理Context的方法
2015/07/21 Python
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
python基于递归解决背包问题详解
2019/07/03 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
Python监听剪切板实现方法代码实例
2020/11/11 Python
教师党员思想汇报
2014/01/06 职场文书
关于旷工的检讨书
2014/02/02 职场文书
求职毕业生自荐书
2014/02/08 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
无房证明范本
2014/09/17 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
文明班级申报材料
2014/12/24 职场文书
敬业奉献模范事迹材料(2016精选版)
2016/02/26 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle