让我承认,我的数据库中有一个字段“内容”,我存储一个组件,并显示它的数据。如何呈现此组件?
我知道v可以呈现html,但是它不理解这个组件。
// My data coming from database:
// data.content = "<w-image slug="my-image-slug"></w-image>"
<template>
<div v-html="data.content"></div> <!-- just show the html output -->
</template>
<script>
import WImage from '@/Components/Widgets/Image.vue'
...
export default {
props:{
data : Object,
...
},
components: {
WImage,
...
},
}
</script>
我想这是不可能的,因为它没有编译代码。但是,我对这样做的可能性感到惊讶.
我给它一个机会。
发布于 2021-02-13 13:08:20
根据您提供的信息,我可以想象出一个解决方案,比如:
Vue.component("WImage", {
props: ['slug'],
template: `
<div>{{ slug }}</div>
`
})
new Vue({
el: "#app",
data() {
return {
htmlstring: "<w-image slug='my-image-slug'></w-image>"
}
},
render(h) {
return h({
template: `<div>${ this.htmlstring }</div>`
})
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app"></div>
如果事先知道可能的组件,那么可以注册/动态导入到处理所有HTML
字符串的组件中。使用render
函数通过传递一个带有template
的组件对象来呈现HTML
字符串。
您需要Vue的全面构建来完成这个任务--正常的构建不会动态编译模板,因此它将无法工作。
https://stackoverflow.com/questions/66170422
复制相似问题