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 相关文章推荐
对字符串进行HTML编码和解码的JavaScript函数
Feb 01 Javascript
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
May 07 Javascript
浅谈javascript 函数内部属性
Jan 21 Javascript
简介JavaScript中toTimeString()方法的使用
Jun 12 Javascript
原生JavaScript编写canvas版的连连看游戏
May 29 Javascript
AngularJS中如何使用echart插件示例详解
Oct 26 Javascript
基于jQuery实现Tabs选项卡自定义插件
Nov 21 Javascript
js中DOM事件绑定分析
Mar 18 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
Aug 06 Javascript
js 递归json树实现根据子id查父id的方法分析
Nov 08 Javascript
Vue通过provide inject实现组件通信
Sep 03 Javascript
用JS实现飞机大战小游戏
Jun 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+SQLite存储方案
2010/09/04 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
python计算对角线有理函数插值的方法
2015/05/07 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
django创建超级用户时指定添加其它字段方式
2020/05/14 Python
Python自动发送和收取邮件的方法
2020/08/12 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
2019年.net常见面试问题
2012/02/12 面试题
经贸日语专业个人求职信范文
2013/12/28 职场文书
四风问题自查报告剖析材料
2014/02/08 职场文书
《将心比心》教学反思
2014/04/08 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
人生遥控器观后感
2015/06/11 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
MySQL 查询速度慢的原因
2021/05/25 MySQL
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL