全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Map.vue基于百度地图组件重构笔记分享

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组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Map.vue  # 百度地图  # 组件  # 深入理解Vue.js轻量高效的前端组件化方案  # 使用vue重构资讯页面的实例代码解析  # 详解vue.js组件化开发实践  # 测试平台开发vue组件化重构前端代码  # 自定义  # 重构  # 是在  # 来了  # 都要  # 不需要  # 已被  # 请大家  # 欢迎大家  # 等功能  # 涉及到  # 这样子  # 设置为  # 再把  # 第二步  # 再做  # 不同类型  # 大家多多  # 就可以  # 复用 


相关文章: 如何在阿里云部署织梦网站?  招商网站制作流程,网站招商广告语?  定制建站价位费用解析与套餐推荐全攻略  XML的“混合内容”是什么 怎么用DTD或XSD定义  Python多线程使用规范_线程安全解析【教程】  网站制作公司排行榜,四大门户网站排名?  C++如何使用std::optional?(处理可选值)  英语简历制作免费网站推荐,如何将简历翻译成英文?  如何用低价快速搭建高质量网站?  微信小程序 五星评分(包括半颗星评分)实例代码  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何用PHP快速搭建CMS系统?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  如何用美橙互联一键搭建多站合一网站?  南京网站制作费用,南京远驱官方网站?  建站之星免费模板:自助建站系统与智能响应式一键生成  建站之星2.7模板快速切换与批量管理功能操作指南  香港服务器如何优化才能显著提升网站加载速度?  广德云建站网站建设方案与建站流程优化指南  建站之星图片链接生成指南:自助建站与智能设计教程  如何快速搭建高效香港服务器网站?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  如何在Tomcat中配置并部署网站项目?  如何通过宝塔面板实现本地网站访问?  如何高效利用亚马逊云主机搭建企业网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  长沙做网站要多少钱,长沙国安网络怎么样?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  建站VPS能否同时实现高效与安全翻墙?  已有域名能否直接搭建网站?  ,石家庄四十八中学官网?  太原网站制作公司有哪些,网约车营运证查询官网?  如何在云指建站中生成FTP站点?  济南专业网站制作公司,济南信息工程学校怎么样?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  如何快速搭建虚拟主机网站?新手必看指南  如何选择服务器才能高效搭建专属网站?  如何在七牛云存储上搭建网站并设置自定义域名?  香港服务器WordPress建站指南:SEO优化与高效部署策略  建站之星如何一键生成手机站?  想学网站制作怎么学,建立一个网站要花费多少?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  制作网站公司那家好,网络公司是做什么的?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何在IIS中新建站点并配置端口与IP地址?  建站上市公司网站建设方案与SEO优化服务定制指南  北京企业网站设计制作公司,北京铁路集团官方网站?  如何快速搭建高效可靠的建站解决方案? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。