【Vue】百度地图切换路由时,地图加载不全,只显示上部地图

问题描述:在vue中加载百度地图, 当初始化时,第一次加载地图时,可以正常显示地图,当切换路由再次进入地图时,地图只显示上部一部分地图。

问题原因:

that.map = new BMap.Map("b_map", {
       enableMapClick: false,
       mapType: BMAP_NORMAL_MAP
});

地图创建只需要初始化一次,或重新加载一次,map多次初始化后,地图就会出现问题;

data() {
   return {
      mapHeight: 0,
      map: null
    }
},
mounted() {
   this.init()
},
 methods: {
    init() {
       this.baiDuMap()
       this.mapHeight = window.innerHeight - 240
       window.onresize = () => {
           this.mapHeight = window.innerHeight - 240
       }
     },
            
     baiDuMap() {
        let that = this
        that.map = new BMap.Map("b_map", {
           enableMapClick: false,
           mapType: BMAP_NORMAL_MAP
        });
        let point = new BMap.Point(119.160414, 36.817672);
        that.map.centerAndZoom(point, 13)
        that.map.setCurrentCity("潍坊")		//设置当前显示城市
        that.map.enableScrollWheelZoom()
        that.map.enableKeyboard()
        // 左下角,添加比例尺
        let top_left_control =
            new BMap.ScaleControl({anchor:BMAP_ANCHOR_BOTTOM_LEFT}) 
        that.map.addControl(top_left_control)
    }
            
}

解决方法:

<div class="app-container">
     <Content class="wrap-content">
         <keep-alive>
             <router-view :title="sidebarSecondTitle"/>
          </keep-alive>
      </Content>
</div>

keep-alive是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。

使用Vue组件切换过程钩子activated(keep-alive组件激活时调用),或挂载钩子mounted:

两者的主要区别就是:activated每次切换路由后重新加载,mounted每次切换路由后不再重新加载。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Vue 实现百度地图切换城市,你需要使用百度地图 JavaScript API。以下是一个简单的示例: 首先,在你的 Vue 组件引入百度地图 JavaScript API: ```javascript <script src="//api.map.baidu.com/api?v=2.0&ak=你的百度地图API密钥"></script> ``` 接下来,在 Vue 组件的 `mounted` 钩子函数初始化地图: ```javascript mounted() { const map = new BMap.Map('map-container') this.map = map // 将地图对象保存在组件实例 // 设置地图心点和缩放级别 const point = new BMap.Point(this.lng, this.lat) map.centerAndZoom(point, this.zoom) // 添加城市选择控件 const size = new BMap.Size(70, 20) map.addControl(new BMap.CityListControl({ anchor: BMAP_ANCHOR_TOP_LEFT, offset: size, // 切换城市触发的回调函数 onChangeBefore: (function() { // 隐藏信息窗口 this.infoWindow && this.infoWindow.close() }).bind(this), // 切换城市完成后触发的回调函数 onChangeAfter: (function(city) { // 更新组件的城市信息 this.city = city.name this.lng = city.center.lng this.lat = city.center.lat // 移动地图心点 const point = new BMap.Point(this.lng, this.lat) this.map.setCenter(point) }).bind(this) })) } ``` 注意,在上面的代码,`this.lng`、`this.lat` 和 `this.zoom` 是组件的数据属性,用于控制地图心点和缩放级别。`this.city` 也是组件的数据属性,用于显示当前选择的城市。 最后,在你的 Vue 模板添加一个容器来显示地图: ```html <template> <div> <div id="map-container" style="height: 500px;"></div> <p>当前城市:{{ city }}</p> </div> </template> ``` 这样,当用户在城市选择控件切换城市地图心点会随之改变,同组件的城市信息也会更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值