mapDirective.js

// @ts-check

import MapUtil from "./mapUtilV2";

const Hooks = {
  2: {
    created: "bind",
    mounted: "inserted",
    updated: "componentUpdated",
    unmounted: "unbind",
  },
  3: {
    created: "created",
    mounted: "mounted",
    updated: "updated",
    unmounted: "unmounted",
  },
};

/**
 * 生成 map 指令配置
 * @param {object} maptalks - maptalks 引用
 * @param {object} option 地图配置
 * @returns {object} map 指令配置
 */
function directiveMap(maptalks, option) {
  const vueVersion = 2;

  return {
    [Hooks[vueVersion]["mounted"]](el) {
      el.mapUtil = new MapUtil(maptalks, el, option);
    },
    [Hooks[vueVersion]["unmounted"]](el) {
      el.mapUtil.destroy();
      el.mapUtil = null;
    },
  };
}

export default directiveMap;