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 相关文章推荐
node.js中的fs.futimes方法使用说明
Dec 17 Javascript
jquery实现图片随机排列的方法
May 04 Javascript
javascript匀速运动实现方法分析
Jan 08 Javascript
javascript实现checkbox复选框实例代码
Jan 10 Javascript
微信小程序 框架详解及实例应用
Sep 26 Javascript
基于jQuery的select下拉框选择触发事件实例分析
Nov 18 Javascript
jQuery实现选项卡功能(两种方法)
Mar 08 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
Apr 11 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
Apr 20 Javascript
Vue中使用webpack别名的方法实例详解
Jun 19 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
Dec 09 Javascript
vue使用exif获取图片经纬度的示例代码
Dec 11 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
农民C键的运用技巧
2020/03/04 星际争霸
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
PHP解密Unicode及Escape加密字符串
2015/05/17 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
React 高阶组件入门介绍
2018/01/11 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
举例区分Python中的浅复制与深复制
2015/07/02 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
Python线性回归实战分析
2018/02/01 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
Python线程threading模块用法详解
2020/02/26 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
一体化教学实施方案
2014/05/10 职场文书
班级标语大全
2014/06/21 职场文书
会计求职自荐信
2015/03/26 职场文书
在校生证明
2015/06/17 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
Python3接口性能测试实例代码
2021/06/20 Python
你需要掌握的20个Python常用技巧
2022/02/28 Python
JavaScript获取URL参数的方法分享
2022/04/07 Javascript