vue中怎么在innerHTML添加vue组件呢?
我有一个Vue组件(Highlight.vue),现在写一个Markdown组件,要复用这个Highlight.vue组件,markdown中解析代码模块是通过js回调方式的,示例如下:
require('markdown')({
highlight: (code, lang) => {
// 需要在此处使用Hightlight.vue组件(直接写无法生效)
return '<Highlight code="code" lang="lang"></Highlight>'
}
});
各位大佬,有没有办法解决这种插入vue组件代码的?
回复
1个回答

test
2024-06-29
自定义指令:
Vue.directive('markdown', {
bind(el, binding, vnode) {
const markdown = require('markdown')({
highlight: (code, lang) => {
const Highlight = Vue.extend(vnode.context.$options.components.Highlight);
const component = new Highlight({
propsData: { code, lang }
}).$mount();
return component.$el.outerHTML;
}
});
el.innerHTML = markdown.parse(el.textContent || '');
}
});
然后,你可以在你的模板中使用这个自定义指令,就像这样:
<template>
<div v-markdown="markdownContent"></div>
</template>
<script>
export default {
data() {
return {
markdownContent: `
console.log('Hello, world!');
```
`
};
}};</script>
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容