Я интегрирую мощную стороннюю библиотеку, управляющую DOM, в мое большое приложение Vue. Эта библиотека предоставляет элемент SVG, который она создает, и подключает к внутренним событиям преобразования, к которым я затем могу добавить элементы SVG. Я хочу обернуть эту библиотеку в компонент таким образом, чтобы я мог предоставить ей компоненты SVG vue со слотами как дочерние элементы
Я нахожу множество простых примеров того, как обернуть сторонний компонент с помощью vueкомпонента, но я не нашел абсолютно ничего о смешивании существующего HTML с возвращаемым значением функции рендеринга.
Я хочу иметь возможность использовать эту структуру сортировки, хотя и более сложным образом:
parent
<template lang="pug">
div
third-party-svg-wrapper(:props="props")
g
custom-svg-rect(:v-for="rect of rects")
</template>
Wrapper Component
export default {
name: 'third-party-svg-wrapper',
created(){
this.$options.wrapper = Document.createElement('div')
this.$options.nonReactiveThirdPartySVGTool = thirdPartySVGTool({
element:this.$options.wrapper,
});
},
render(createElement) {
let locationForSlot = this.$options.wrapper.querySelector(`svg`);
// this obviously doesn't work, because this.$slots.default is
// not a DOM Node. However, it's a representation
// of what I want to do, appending the slot
// to the correct location in the third party html
locationForSlot.appendChild(this.$slots.default)
return createElement(
'svg',
this.$options.wrapper
);
}
}
Идеальным результатом было бы создание элемента SVG, как и ожидалось ThirdPartySVGTool, который затем реактивно отображал бы слоты, помещенные в компонент svg. это сгенерировано.
Возможно ли это? Если это так, каков наилучший способ сделать это?