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 浮动层菜单收藏
Jan 16 Javascript
google 搜索框添加关键字实现代码
Apr 24 Javascript
js进行表单验证实例分析
Feb 10 Javascript
整理一下常见的IE错误
Nov 18 Javascript
bootstrap实现动态进度条效果
Mar 08 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
Apr 12 Javascript
老生常谈combobox和combotree模糊查询
Apr 17 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
Jul 28 Javascript
js截取字符串功能的实现方法
Sep 27 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
Aug 03 Javascript
JavaScript实现Excel表格效果
Feb 07 Javascript
Vue实现小购物车功能
Dec 21 Vue.js
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全局变量和类配合使用深刻理解
2013/06/05 PHP
PHP文件缓存内容保存格式实例分析
2014/08/20 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
各种快递查询--Api接口
2016/04/26 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
Python set集合类型操作总结
2014/11/07 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
Python遍历numpy数组的实例
2018/04/04 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
辞旧迎新演讲稿
2014/09/15 职场文书
辞职信的写法
2015/02/27 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android
python接口测试返回数据为字典取值方式
2022/02/12 Python