全网整合营销服务商

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

免费咨询热线: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组件化重构前端代码  # 自定义  # 重构  # 是在  # 来了  # 都要  # 不需要  # 已被  # 请大家  # 欢迎大家  # 等功能  # 涉及到  # 这样子  # 设置为  # 再把  # 第二步  # 再做  # 不同类型  # 大家多多  # 就可以  # 复用 


相关文章: 图册素材网站设计制作软件,图册的导出方式有几种?  如何通过山东自助建站平台快速注册域名?  c++ stringstream用法详解_c++字符串与数字转换利器  详解jQuery停止动画——stop()方法的使用  高端建站如何打造兼具美学与转化的品牌官网?  建站之星好吗?新手能否轻松上手建站?  如何在Windows 2008云服务器安全搭建网站?  如何用PHP快速搭建高效网站?分步指南  太平洋网站制作公司,网络用语太平洋是什么意思?  用v-html解决Vue.js渲染中html标签不被解析的问题  高性能网站服务器部署指南:稳定运行与安全配置优化方案  名字制作网站免费,所有小说网站的名字?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  如何正确下载安装西数主机建站助手?  如何配置支付宝与微信支付功能?  安徽网站建设与外贸建站服务专业定制方案  香港网站服务器数量如何影响SEO优化效果?  模具网站制作流程,如何找模具客户?  英语简历制作免费网站推荐,如何将简历翻译成英文?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  如何用wdcp快速搭建高效网站?  如何在香港免费服务器上快速搭建网站?  如何通过FTP空间快速搭建安全高效网站?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何快速搭建高效可靠的建站解决方案?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  建站之星微信建站一键生成小程序+多端营销系统  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  宝塔新建站点为何无法访问?如何排查?  如何通过PHP快速构建高效问答网站功能?  html制作网站的步骤有哪些,iapp如何添加网页?  python的本地网站制作,如何创建本地站点?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  高防服务器租用如何选择配置与防御等级?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  如何用西部建站助手快速创建专业网站?  香港服务器如何优化才能显著提升网站加载速度?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  济南网站制作的价格,历城一职专官方网站?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  常州自助建站工具推荐:低成本搭建与模板选择技巧  网站插件制作软件免费下载,网页视频怎么下到本地插件?  海南网站制作公司有哪些,海口网是哪家的?  建站之星安装后如何配置SEO及设计样式?  高防服务器租用指南:配置选择与快速部署攻略  如何通过IIS搭建网站并配置访问权限?  制作网站外包平台,自动化接单网站有哪些? 

您的项目需求

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