地图实例传递流程
项目结构
https://github.com/ZhangAilan/ChinaPovertyFreeGIS


1. 问题识别
- YearSelect 组件需要接收 mapInstance prop 来操作地图
- 需要建立从地图组件到年份选择组件的数据传递链路
2. 解决方案实施
第一步:修改 MapContainer.vue
- 添加了
defineEmits(['map-ready']) 定义事件
- 在地图初始化完成后发出
map-ready 事件,传递地图实例
- 确保地图完全加载后才发出事件

第二步:修改 MainLayout.vue
- 添加了
mapInstance 响应式引用
- 监听 MapContainer 的
@map-ready 事件
- 实现
handleMapReady 方法接收地图实例
- 将地图实例作为 prop 传递给 YearSelect 组件



第三步:YearSelect.vue 已准备就绪
- 定义了
mapInstance prop 接收地图实例
- 监听地图实例变化的 watch
- 使用地图实例进行图层操作(添加/移除 GeoJSON 图层)


3. 数据流向
MapContainer (地图初始化)
↓ emit('map-ready', map)
MainLayout (接收并存储地图实例)
↓ :mapInstance="mapInstance"
YearSelect (使用地图实例进行图层操作)
4. 关键技术点
- 事件发射:使用
defineEmits 和 emit 向上传递数据
- 响应式引用:使用
ref 存储地图实例
- Props 传递:通过 props 向下传递地图实例
- 异步处理:确保地图完全初始化后再传递实例
5. 实现效果
- ✅ YearSelect 组件可以接收到有效的地图实例
- ✅ 可以进行年份图层的添加和移除操作
- ✅ 控制台输出确认数据传递成功
- ✅ 实现了组件间的解耦和数据流的清晰管理
这个过程展示了 Vue 3 中父子组件通信的典型模式:子组件通过事件向上传递数据,父组件通过 props 向下传递数据。
地图实例传递流程
项目结构
https://github.com/ZhangAilan/ChinaPovertyFreeGIS
1. 问题识别
2. 解决方案实施
第一步:修改 MapContainer.vue
defineEmits(['map-ready'])定义事件map-ready事件,传递地图实例第二步:修改 MainLayout.vue
mapInstance响应式引用@map-ready事件handleMapReady方法接收地图实例第三步:YearSelect.vue 已准备就绪
mapInstanceprop 接收地图实例3. 数据流向
4. 关键技术点
defineEmits和emit向上传递数据ref存储地图实例5. 实现效果
这个过程展示了 Vue 3 中父子组件通信的典型模式:子组件通过事件向上传递数据,父组件通过 props 向下传递数据。