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来定义

相关推荐
顾随2 分钟前
(二)kettle--输入与输出
javascript·数据库·kettle
幼儿园技术家39 分钟前
为什么 SSR 一定会有 hydration mismatch?
前端
FlyWIHTSKY40 分钟前
Vue 3 中 RouteRecord 详解(Vue Router 4)
前端·javascript·vue.js
老王以为42 分钟前
前端视角下的 Java
java·javascript·程序员
yingyima1 小时前
用 cron 定时发送邮件报告:实战案例详解
前端
GAMC1 小时前
从 “凭感觉写代码” 到 “按规范做开发”:OpenSpec 让 AI 编程回归工程化
前端·人工智能
Alice-YUE1 小时前
【JS高频八股】什么是闭包?
开发语言·javascript·笔记·学习
微学AI1 小时前
Claude-Code-python 前端改造项目工作流程详解
开发语言·前端·python
D_C_tyu1 小时前
JavaScript | 数独游戏核心算法实现
javascript·算法·游戏
海天鹰1 小时前
EXIF-JS
javascript