vue-baidu-map 覆盖物显隐控制
工作需要使用 vue-baidu-map,但是像这种服务于大众的插件,好多自己的特殊情况是满足不了的,掰扯了半天,发现在上面添加的覆盖物,除了自定义覆盖物外,其他的都没法控制显示隐藏.或许是可以控制,但我没有找到,这可如何是好.
然后就想到了用v-if来控制:
<div v-if="show">
<bm-polyline ... ></bm-polyline>
</div>
如此,达到要求了,但是问题来了:
- 多个覆盖物同时存在的时候,用v-if控制显隐的时候,覆盖物的叠放顺序发生了变化.
- bm-driving组件是个异步的道路索引,v-if把它干掉以后,等会找到的道路还是会出现.
几经苦思冥想,然后想到了用数据控制显隐,把这些组件都封装了一层,在接受个参数show是ture的时候使用正常的数据,在接受的参数show是false的时候,给个空数据或者无效数据.
例如polyline:
<template>
<bm-polyline
:path="mpoints"
:strokeColor="mColor"
:strokeWeight="mwidth"
:strokeOpacity="mopacity"
></bm-polyline>
</template>
<script>
export default {
name:'ls_map_polyline',
props:['show','points','color','width','opacity'],
computed:{
mpoints(){
if(typeof this.show == 'undefined' || this.show){
return this.points || [{lng:116.404,lat:39.915},{lng:116.375,lat:39.824},{lng:116.423,lat:39.9}]
}else{
return []
}
},
mColor(){
return this.color || 'red'
},
mwidth(){
return this.width || 4
},
mopacity(){
return this.opacity || 0.9
}
}
}
</script>
在show是false的时候,mpoints变成了一个空数组,从而达到隐藏的效果.
以此类推,圆形可以控制半径,道路索引可以控制起终点.
这个组件的api还有个小问题,道路索引 路线添加完成的事件是polylinesset, api上写的onpolylinesset,多了个on,当时找这个问题都快找吐血了.
如果有高手发现有控制显示隐藏的方法时候烦请告知,小弟深谢
小弟一直很纳闷这个组件的原理,是在baidu-map组件里把slot解析一遍吗?有没有高手指点下