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组件代码的?
回答:
自定义指令:
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>
以上是 vue中怎么在innerHTML添加vue组件呢? 的全部内容, 来源链接: utcz.com/p/934672.html