【问题标题】:VueJS Print HTML to PageVueJS 将 HTML 打印到页面
【发布时间】:2016-12-05 20:56:37
【问题描述】:

我有一个包含 HTML 字符串作为其属性之一的属性。

当我尝试将其打印到模板中的页面时,它实际上会打印 HTML。所以文本包含 HTML 标签,它本身不会被浏览器解释为 HTML。

我该如何解决这个问题?

模板:

<div class="description">
    {{ property.description }}
</div>

输出:

<p>Suscipit est aut molestiae provident quis magnam.</p> <p>Nesciunt iure impedit sint iste.</p> <p>Aspernatur repudiandae laborum dolor harum magnam officiis ad nihil.</p> <p>Non deserunt rerum adipisci voluptates est eos et.</p> 

【问题讨论】:

    标签: javascript html string vue.js


    【解决方案1】:

    现在我们使用的是 Vue2,这略有改变。根据docs,我们需要使用v-html指令。

    例如,我制作了一个加载按钮,如下所示:

    <button type="submit" v-html="loading ? loadingText : 'Login'">
    

    变量代表的地方:

    data: function (router) {
      return {
        loading: false,
        loadingText: '<i class="fa fa-spinner fa-spin"></i> Loading...',
      }
    }
    

    这会产生:

    loading 状态更改为true

    【讨论】:

      【解决方案2】:

      您可以使用 v-html 来执行此操作。如docs中所说:

      <div class="description" v-html="property.description"></div>
      

      Triple {{{ 不适用于 vuejs 2。

      【讨论】:

        【解决方案3】:

        注意:此答案适用于 vue.js v1。对于 v2,请参阅 webnoob 的回答 here

        根据docs

        双胡须将数据解释为纯文本,而不是 HTML。为了输出真正的 HTML,您需要使用三重胡须。

        使用 3 个大括号来完成你的任务:

        <div class="description">
            {{{ property.description }}}
        </div>
        

        旁注(也来自文档):

        在您的网站上动态呈现任意 HTML 可能非常危险,因为它很容易导致 XSS 攻击。仅对受信任的内容使用 HTML 插值,从不对用户提供的内容使用。

        【讨论】:

        • 太好了,谢谢。是的,内容在进入数据库之前被输入和验证,然后通过后端的 Markdown 解析器拉取。它在到达 Vue 之前被解析和构造:)
        • 根据文档,这似乎不适用于 vuejs 2
        • @noelboss 最初的问题是针对 vue.js v1 提出的(当时 v2 还没有发布)。我已经用下面帖子的链接更新了我的问题。
        猜你喜欢
        • 2016-03-26
        • 1970-01-01
        • 1970-01-01
        • 2012-04-07
        • 2011-11-01
        • 2011-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多