我正在尝试制作一个页面,该页面会将文本字符串(https://pastebin.com/Mp9sKy1A)加载到页面中,然后用--FML-[componentName]
适当的组件替换任何实例。
因此,例如--FML-[NoteBlock]
将自动替换为NoteBlock
组件。
这是我到目前为止所拥有的:
pureContent () {
const c = this.content.replaced
const re = new RegExp(`<p>--FML-\\[(\\w+)\\]</p>`, 'g')
return c.replace(re, ($0, $1) => `<component v-bind:is="${$1.toLowerCase()}"></component>`)
}
然后输出将被放置到以下模板中:
<template>
<div>
<site-header></site-header>
<div class="wrapper">
<side-bar></side-bar>
<main class="container" v-html="pureContent()" />
</div>
</div>
</template>
它实际上有点工作。然而,这component
部分并没有作为一个实际的组件被拉入,而是一个<component>
HTML 标记,这显然不是想要的结果。有没有办法让它按需要工作?
如果有人感兴趣,这里是完整的 SFC 文件:https ://pastebin.com/yb4CJ1Ew
这是我目前得到的输出:
<main data-v-86dcc3c4="" class="container">
<h1 id="creating-new-contexts">Creating new contexts</h1>
<h2 id="section-title">Section Title</h2>
<h3 id="section-subtitle-that-contains-additional-information">
Section subtitle that contains additional information
</h3>
<p>
Cillum ipsum ad veniam elit non. Sunt ea ut quis qui dolore id voluptate
magna. Ex non commodo reprehenderit ipsum irure. Ad excepteur nulla ullamco
et deserunt magna et sint reprehenderit sint esse commodo. Tempor duis anim
nisi commodo incididunt ut ex et sunt laborum excepteur ea culpa laborum.
</p>
<component v-bind:is="noteblock"></component>
<p>
Officia esse Lorem ad duis dolore nostrud ex elit aliqua incididunt sint ad
ex. Eiusmod do in ad aute nulla eiusmod tempor Lorem non. Qui sunt voluptate
laborum mollit elit adipisicing minim dolore voluptate veniam incididunt
proident ullamco. Ipsum est cupidatat occaecat pariatur ut aute.
</p>
<component v-bind:is="codeexample"></component>
<component v-bind:is="propstable"></component>
</main>
<component>
标签应该是实际的Vue 组件