UNPKG

@vuemap/vue-amap

Version:

高德地图vue3版本封装

153 lines (150 loc) 4.67 kB
import { defineComponent, provide, ref, nextTick, onBeforeUnmount, openBlock, createElementBlock, createElementVNode, renderSlot } from 'vue'; import '../../mixins/index.mjs'; import guid from '../../utils/guid.mjs'; import '../../services/index.mjs'; import { propsType } from './props.mjs'; import { provideKey, useRegister } from '../../mixins/useRegister.mjs'; import { lazyAMapApiLoaderInstance } from '../../services/injected-amap-api-instance.mjs'; const _hoisted_1 = { class: "el-vue-amap-container" }; const _hoisted_2 = ["id"]; var script = /* @__PURE__ */ defineComponent({ ...{ name: "ElAmap", inheritAttrs: false }, __name: "amap", props: propsType, emits: ["init", "update:zoom", "update:center", "update:rotation", "update:pitch"], setup(__props, { expose: __expose, emit: __emit }) { const needInitComponents = []; const provideData = { $amapComponent: void 0, addChildComponent(cb) { needInitComponents.push(cb); }, isDestroy: false }; provide(provideKey, provideData); const props = __props; const emits = __emit; const mapDomId = ref(props.vid || guid()); let $amapComponent; const { $$getInstance } = useRegister((options) => { return new Promise((resolve, reject) => { if (!lazyAMapApiLoaderInstance) { reject(new Error("\u8BF7\u521D\u59CB\u5316initAMapApiLoader")); return; } lazyAMapApiLoaderInstance.then(() => { nextTick(() => { $amapComponent = new AMap.Map(mapDomId.value, options); provideData.$amapComponent = $amapComponent; bindModelEvents(); resolve($amapComponent); }); }).catch((e) => { reject(e); }); }); }, { isRoot: true, emits, needInitComponents, provideData, watchRedirectFn: { __dragEnable(flag) { if ($amapComponent) { $amapComponent.setStatus({ dragEnable: flag }); } }, __zoomEnable(flag) { if ($amapComponent) { $amapComponent.setStatus({ zoomEnable: flag }); } }, __jogEnable(flag) { if ($amapComponent) { $amapComponent.setStatus({ jogEnable: flag }); } }, __keyboardEnable(flag) { if ($amapComponent) { $amapComponent.setStatus({ keyboardEnable: flag }); } }, __doubleClickZoom(flag) { if ($amapComponent) { $amapComponent.setStatus({ doubleClickZoom: flag }); } }, __scrollWheel(flag) { if ($amapComponent) { $amapComponent.setStatus({ scrollWheel: flag }); } }, __rotateEnable(flag) { if ($amapComponent) { $amapComponent.setStatus({ rotateEnable: flag }); } }, __pitchEnable(flag) { if ($amapComponent) { $amapComponent.setStatus({ pitchEnable: flag }); } }, __resizeEnable(flag) { if ($amapComponent) { $amapComponent.setStatus({ resizeEnable: flag }); } }, __showIndoorMap(flag) { if ($amapComponent) { $amapComponent.setStatus({ showIndoorMap: flag }); } } } }); const bindModelEvents = () => { $amapComponent.on("zoomchange", () => { emits("update:zoom", $amapComponent.getZoom()); }); $amapComponent.on("rotateend", () => { emits("update:rotation", $amapComponent.getRotation()); }); $amapComponent.on("dragging", () => { emits("update:center", getCenter()); }); $amapComponent.on("dragend", () => { emits("update:pitch", $amapComponent.getPitch()); }); $amapComponent.on("touchmove", () => { emits("update:center", getCenter()); }); }; const getCenter = () => { const center = $amapComponent.getCenter(); return [center.lng, center.lat]; }; onBeforeUnmount(() => { if ($amapComponent) { $amapComponent.clearEvents(); $amapComponent.destroy(); $amapComponent = null; } }); __expose({ $$getInstance }); return (_ctx, _cache) => { return openBlock(), createElementBlock("div", _hoisted_1, [ createElementVNode("div", { id: mapDomId.value, class: "el-vue-amap" }, null, 8, _hoisted_2), renderSlot(_ctx.$slots, "default") ]); }; } }); export { script as default }; //# sourceMappingURL=amap.vue2.mjs.map