在 vue 中使用高德和百度 同时可以使用vue 的动态渲染

在 vue 中使用高德和百度 同时可以使用vue 的动态渲染

在开发大屏项目时,常常会遇到十分复杂的的打点或信息窗,如果按照 API 文档中的自定义代码,需要写大量的 js 和 html。于是就有了一个想法,能不能使用 vue 的组件呢。
完整代码地址

实现思路

  1. 首先需要构建虚拟 dom,并传入动态组件
  2. 将虚拟 dom 渲染成真实 dom,并获取到真实 dom
  3. 通过真实 dom 直接渲染 marker 或 window

代码实现

Vue2

build_async_dom(component, props) {
    // ​​动态创建一个 Vue 组件
    const tipComponent = Vue.extend({
        render: (h) =>
            h(component, {
                props
            }),
    })
    // 将组件渲染成真实 dom
    const realDom = new tipComponent().$mount()
    // 获取并返回 dom
    return realDom.$el
}

Vue3

build_async_dom(component, props) {
    let root = document.createElement('div')
    // ​​动态创建一个 Vue 组件
    const vnode = h(component, props);
    // 渲染真实 DOM
    render(vnode, root);
    const result = vnode.el
    // 移除创建的容器元素 避免占用内存
    root = null
    return result
}

在地图中应用(以高德地图为例)

	let marker = new AMap.Marker({
        position: [116.397428, 39.90923],
        content: build_async_dom(testComp, { name: testProps }),
       	offset: new AMap.Pixel(-100, -60),
    })
    map.add(marker)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值