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

  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);

(0)

相关推荐

  • 百度手机地图离线导航怎么用 手机百度地图离线导航功能使用教程图解

    不得不说现在的技术真的对人们的帮助真的很大,但是技术的发展却让很多人陷入了迷茫。别人开发出使用的软件却不会用。现在为大家带来了便利,来到查找你想要知道的知识即可。手机百度地图离线导航怎么用?小编将演示 ...

  • 百度地图怎么用?(图文教程)

    经常外出的朋友经常遇到路径查询,听说百度地图可以查询驾车路线,还可以查询公交,可是没有用过。百度地图确实是个好工具,小编给大家介绍介绍吧。 首先,打开百度,或者直接进入百度地图网页: http://m ...

  • 百度室内地图怎么用?手机百度地图室内图使用教程

    百度室内地图怎么用?手机百度地图室内图使用方法,逛商场都会迷路?快来试试百度室内地图吧~有了它就知道自己喜欢的那家店在哪里咯~一起来看看吧。 打开手机百度地图软件,在百度地图中选择侧边栏的第二按钮,点 ...

  • 百度地图app怎么收藏地点? 百度地图收藏地点的教程

    百度地图app中想要收藏地点,该怎么收藏地点呢?下面我们就来看看百度地图app收藏地点的教程. 1.打开自己手机上的百度地图 2.百度地图的收藏功能是需要用户在登录状态下使用的.所以确保用户登录. 3 ...

  • wordpress百度地图插件Baidu-Sitemap使用教程

    发现博客的文章也越来越多了,为了方便搜索引擎的爬取,很多朋友添加了一款插件:Baidu-Sitemap,用来自动生成网站地图,今天就跟不知道的做wordpress博客地图的朋友,分享下这款很牛逼的插件 ...

  • 怎么查看百度地图实时路况?实时路况功能是如何实现的?

    就有一些好奇宝宝总想知道实时路况功能是如何实现的,下面是小编的总结: 目前,提供路况服务的公司主要三家,世纪高通,北大千方(收购了原来的掌城),九州联宇.他们给百度地图和google地图这些路况数据的 ...

  • 百度安全组件怎么删除?win7百度安全组件服务卸载方法

    百度安全组件服务程序怎么删除?下文将演示win7百度安全组件服务程序删除教程,很多网友不知道该如何删除百度安全组件服务程序,请参考下文步骤吧。 第一步、首先鼠标右键点击360加速球,鼠标左键单击看网速 ...

  • 百度地图足迹怎么清除?

    百度地图中的足迹想要清除,该怎么删除足迹呢?下面我们就来看看百度地图清除足迹的教程. 1.打开软件点击设置,如下图所示. 2.点击隐私设置,如下图所示. 3.点击出行记录设置,如下图. 4.选择足迹设 ...

  • 百度地图app怎么解锁成就? 百度地图成就的获得方法

    百度地图中想要解锁成就,该怎么解锁呢?下面我们就来看看百度地图解锁成就的教程. 一.百度地图成就在哪里? 1.现在手机上打开百度地图,当然也得登录自己的账号.然后,点击左上角的头像. 2.接着在下图的 ...