【问题标题】:Vue 3 render dynamic commentVue 3 渲染动态评论
【发布时间】:2021-03-13 10:11:23
【问题描述】:

如何在 Vue 3 中正确呈现动态评论?我尝试了在我的情况下不起作用的 v-html,例如,https://i.imgur.com/EtrVmGu.png

<template>
  <!-- Method 1: not working properly, https://i.imgur.com/EtrVmGu.png -->
  <template v-html="COMMENT" />

  <!-- Method 2: does not solve the problem, print as string -->
  {{ COMMENT }}

   content here

 <!--[if mso | IE]> </span> <![endif]-->

</template>

<script>
export default {
  setup() {
    const COLOR = "#FF0000";
    const COMMENT = `<!--[if mso | IE]> <span style="background: ${COLOR}"> <![endif]-->`;

    return {
      COMMENT
    }
  }
}
<script>

&lt;div v-html=""&gt; 不会解决问题,请参阅:https://i.imgur.com/6tqaQAe.png

【问题讨论】:

    标签: javascript html vue.js vuejs3


    【解决方案1】:

    这对我有用。

    <template>
      <h1>Dynamic Component</h1>
      <div v-html="COMMENT"></div>
    </template>
    
    <script>
    export default {
      setup() {
        const COLOR = "#FF0000";
        const COMMENT = `<span style="background: ${COLOR}">Comment</span>`;
        return {
          COMMENT,
        };
      },
    };
    </script>
    

    【讨论】:

    • div 将无法解决此问题,请参阅另一条评论中的结束标记:i.imgur.com/6tqaQAe.png
    • @DelowarHosain 为了获得帮助,不要试图对答案投反对票,因为这会阻止人们帮助你
    【解决方案2】:

    您也可以使用带有&lt;component is&gt; 的动态组件 Vue JS Dynamic Components

    并将所有评论组件代码放在不同的文件中:comment.vue

    <template>
      <h1>Dynamic Component</h1>
      <component :is='currentComponent'>
    </template>
    
    <script>
    import CommentComponent from './comment.vue'
    export default {
      computed: {
        currentComponent() {
          // do some logic then
          return CommentComponent
        }
      }
    };
    </script>
    

    【讨论】:

      【解决方案3】:

      v-html 应该安装在真实的 html 标签中,而不是虚拟的 template

        <div v-html="COMMENT" ></div>
      

      你可以在被检查的 DOM 中看到评论

      【讨论】:

      • 感谢您的回答,我需要直接打印,不带任何标签。我已经更新了我的代码,以便您可以理解用例。
      • 是html评论,页面无法显示
      • 这就是这个问题,i.imgur.com/6tqaQAe.png
      • 你的问题不够清楚,请多解释