【发布时间】:2021-09-19 18:34:32
【问题描述】:
我正在开发一个 vue.js 项目(版本 3)。我遇到了一种情况,我想将组件的渲染 HTML 视图用于当前组件的方法。
我在我的 Vue 项目中创建了以下 SVG 组件。
CircleWithTextSvg.vue
<template>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" width="20" height="20">
<g id="UrTavla">
<circle cx="10" cy="10" r="10" stroke="gray" stroke-width="1" :fill="fill" />
<text x="50%" y="50%" text-anchor="middle" stroke="black" stroke-width="1px" dy=".3em">{{text}}</text>
</g>
</svg>
</template>
<script>
export default {
props: {
text: {
type: String,
default: "1"
},
fill: {
type: String,
default: "white"
}
}
}
</script>
这个组件基本上渲染了一个里面有文字的圆圈。 如果我在主要组件的模板部分中使用此组件,如下所示,那么它可以正常工作(显然)
MainComponent.vue
<template>
<circle-with-text-svg />
</template>
但我想将此 SVG 组件渲染输出作为选项发送给第三方。
实际用例:- 实际上,我创建了这个单独的组件以在我的传单地图上显示为标记。现在的问题是我想在 MainComponent 的方法中使用这个 SVG 组件,这样我就可以将它用作 L.divIcon 的一个选项
当我尝试以下操作时
export default {
methods: {
generateMap(element) {
// ...
let icon = L.divIcon({
html: <circle-with-text-svg
fill="'#D3D5FF'"
text="1" />,
iconSize: [10, 10]
});
// ...
}
}
}
然后它给出错误
对实验性语法“JSX 当前未启用”的支持
在react中,我们可以简单的正常使用另一个组件的模板里面的组件。但是我们如何在 vue.js 中实现这一点
通过查看错误,似乎 JSX 实验没有启用。
有人可以告诉我如何实现这一目标吗?
【问题讨论】:
-
你不认为这会增加开销吗?因为我迭代了太长的列表,每个列表元素都会为 SVG 创建自己的 vue 应用程序实例。
-
顺便说一句,为什么它不适用于 vue 3。这是 vue 2 的吗?
-
是的,链接的答案适用于 Vue 2,需要稍作更改才能与 Vue 3 一起使用(主要是
createApp而不是new Vue),但原理是一样的 - 创建新应用程序,挂载它,检索呈现的 HTML。关于开销 -createApp与模板中的渲染组件非常相似 - 应用程序和组件都是 Vue 的实例。 -
如果您发布您对 vue 3 的答案会更好。我无法将 vue 2 应用程序转换为 vue 3。提前致谢
标签: javascript vue.js svg leaflet vuejs3