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组件代码的?

阅读 3.1k
1 个回答

自定义指令:

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>

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题