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 相关文章推荐
Jquery Ajax.ashx 高效分页实现代码
Oct 20 Javascript
基于JQuery实现的Select级联
Jan 27 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
May 15 Javascript
JS使用for循环遍历Table的所有单元格内容
Aug 21 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
May 12 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
Apr 24 Javascript
详解webpack+es6+angular1.x项目构建
May 02 Javascript
Angular 4依赖注入学习教程之简介(一)
Jun 04 Javascript
vue获取当前激活路由的方法
Mar 17 Javascript
vue src动态加载请求获取图片的方法
Oct 17 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
Dec 06 Javascript
原生js+css调节音量滑块
Jan 15 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
YII框架关联查询操作示例
2019/04/29 PHP
jQuery DOM操作实例
2014/03/05 Javascript
BootStrap与validator 使用笔记(JAVA SpringMVC实现)
2016/09/21 Javascript
js上下视差滚动简单实现代码
2017/03/07 Javascript
基于jQuery Easyui实现登陆框界面
2017/07/10 jQuery
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
Swiper自定义分页器使用详解
2017/12/28 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
JSONP 的原理、理解 与 实例分析
2020/05/16 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
JavaScript 几种循环方式以及模块化的总结
2020/09/03 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
Python实现Linux监控的方法
2019/05/16 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
Keras设置以及获取权重的实现
2020/06/19 Python
python定义类的简单用法
2020/07/24 Python
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
有机童装:Toby Tiger
2018/05/23 全球购物
致200米运动员广播稿
2014/02/06 职场文书
服装店营销方案
2014/03/10 职场文书
党员大会主持词
2014/04/02 职场文书
商业用房租赁协议书
2014/10/13 职场文书
教研活动主持词
2015/07/03 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书