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更改class和id的方法
Oct 10 Javascript
Javascript 代码也可以变得优美的实现方法
Jun 22 Javascript
加载列表时jquery获取ul中第一个li的属性
Nov 02 Javascript
jQuery中removeClass()方法用法实例
Jan 05 Javascript
本人自用的global.js库源码分享
Feb 28 Javascript
jQuery插件制作的实例教程
May 16 Javascript
Javascript实现跑马灯效果的简单实例
May 31 Javascript
jQuery 限制输入字符串长度
Jun 20 Javascript
JavaScript实现类似淘宝的购物车效果
Mar 16 Javascript
AngularJS动态菜单操作指令
Apr 25 Javascript
js + css实现标签内容切换功能(实例讲解)
Oct 09 Javascript
json数据格式常见操作示例
Jun 13 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操作mysqli(示例代码)
2013/10/28 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
分享PHP守护进程类
2015/12/30 PHP
php+jQuery+Ajax简单实现页面异步刷新
2016/08/08 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
Laravel使用RabbitMQ的方法示例
2019/06/18 PHP
js获取单选框或复选框值及操作
2012/12/18 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
js实现进度条的方法
2015/02/13 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
从零学Python之入门(四)运算
2014/05/27 Python
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
详解python里的命名规范
2018/07/16 Python
pycham查看程序执行的时间方法
2018/11/29 Python
python机器学习包mlxtend的安装和配置详解
2019/08/21 Python
Django之编辑时根据条件跳转回原页面的方法
2019/08/21 Python
Python Socketserver实现FTP文件上传下载代码实例
2020/03/27 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
python处理写入数据代码讲解
2020/10/22 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
计算机网络专业个人的自我评价
2013/10/17 职场文书
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
篝火晚会主持词
2014/03/25 职场文书
单位单身证明样本
2014/10/11 职场文书
2019暑期安全倡议书!
2019/06/27 职场文书
Python基础之hashlib模块详解
2021/05/06 Python
pytorch 中nn.Dropout的使用说明
2021/05/20 Python