openlayers+vue初学注意点

当我们使用 vue 开发 openplayers 的时候,总是会下意识的使用 ref 来代理openplays 中的 变量, 这种方法是不可取的, 很容易发生我们想不到的错误

下面看一段我最初写的,理论正确,但实际用不了的代码

javascript 复制代码
<script setup>
import {onMounted, ref} from 'vue'
import Map from "ol/Map"
import TileLayer from "ol/layer/Tile.js";
import XYZ from "ol/source/XYZ.js";
import View from "ol/View.js";
import {fromLonLat} from 'ol/proj.js';

const map = ref(null);
const mapRef = ref(null)

const layer1 = ref(null);
const layer2 = ref(null);

onMounted(() => {

  layer1.value = new TileLayer({
    source: new XYZ({
      url: "https://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}"
    })
  })

  layer2.value = new TileLayer({
    source: new XYZ({
      url: "https://webst01.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}"
    })
  });
  map.value = new Map({
    target: mapRef.value,
    layers: [layer1.value, layer2.value],
    view: new View({
      center: fromLonLat([114.31, 30.52]),
      zoom: 10,
      projection: "EPSG:3857"
    })
  })

})


const removeBJ = () => {
  map.value.removeLayer(layer2.value);
}


</script>

<template>
  <div class="button">
    <!--    <button @click="gotoBJ">跳转到北京</button>-->
    <button @click="removeBJ">remove</button>
  </div>
  <div ref="mapRef" id="map"></div>
</template>

<style scoped>
#map {
  width: 100vw;
  height: 100vh;
}
</style>


所以, 我们在使用 vue+openlayers 的时候,对openlayer 中的对象尽量不要去用 ref来定义

相关推荐
ruanCat10 小时前
Prettier 明明执行成功,Markdown 为什么还是没变?一次插件误诊复盘
前端·javascript·node.js
软件开发技术深度爱好者10 小时前
在线学习实践 TypeScript 的官方Playground(演练场)使用介绍
javascript·学习·typescript
百变梦仔10 小时前
Codex 写前端任务时,我用这张 GitHub Skill 地图先选工具
前端·github
2601_9621229711 小时前
nginx 部署前端vue项目
前端·vue.js·nginx