美文网首页Vue框架我爱编程
Vue如何动态渲染html

Vue如何动态渲染html

作者: 阿布ccc | 来源:发表于2017-11-02 18:01 被阅读0次
Vue
大家在使用Vue时,一般使用{{ Mustache }}或者v-text进行插值,对此,官方给出的解释是:

数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值:
<span>Message: {{ msg }}</span>
Mustache 标签将会被替代为对应数据对象上 msg 属性的值。无论何时,绑定的数据对象上 msg 属性发生了改变,插值处的内容都会更新。
通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。但请留心这会影响到该节点上所有的数据绑定:
<span v-once>这个将不会改变: {{ msg }}</span>

但是在项目中,经常会遇到的情况是后台传给前端的数据不是单纯的字符串,而是html代码,比如资讯类的项目,需要我们将html代码渲染到页面中,{{mustache}}或者v-text会把html代码当做纯文本渲染出来,类似效果是这样的:

渲染失败
对于这种情况,官方给出的解决方法是使用v-html,官方解释如下:

双大括号会将数据解释为普通文本,而非 HTML 代码。为了输出真正的 HTML ,你需要使用 v-html 指令:
<div v-html="rawHtml"></div>
这个 div 的内容将会被替换成为属性值 rawHtml,直接作为 HTML——会忽略解析属性值中的数据绑定。注意,你不能使用 v-html 来复合局部模板,因为 Vue 不是基于字符串的模板引擎。反之,对于用户界面 (UI),组件更适合作为可重用和可组合的基本单位。

实验证明,这种方法真的很管用。

但是,这次我在项目中遇到的问题是,后台传给我的数据是经过转义后的html数据,格式如上图所示,v-html只能渲染<span>this is span!</span>这种形式的html代码,对于转义过的代码无法渲染。这时候,我们就要将转义过的html代码通过vue的filter(过滤器)转义成为普通html代码。

过滤器

Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。
过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。
过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:

<!-- 在双花括号中 -->
{{ message | capitalize }}

<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>
filters: {
  capitalize: function (value) {
    if (!value) return ''
    value = value.toString()
    return value.charAt(0).toUpperCase() + value.slice(1)
  }
}

我们需要定义一个filter,用于将转义过的? < > / \等符号转义回来:

 filters: {
        unescape:function (html) {
            return html
                .replace(html ? /&(?!#?\w+;)/g : /&/g, '&amp;')
                .replace(/&lt;/g, "<")
                .replace(/&gt;/g, ">")
                .replace(/&quot;/g, "\"")
                .replace(/&#39;/g, "\'");
        }
    }

然后在需要渲染值的地方,使用该filter:

 <div class="content" v-html="product.content | unescape"></div>

此时渲染出来的页面如图:


渲染成功

大功告成( ⊙ o ⊙ )!

PS:由于过滤器是一个函数,所以过滤器可以接受参数。在{{ message | filterA('arg1', arg2) }}中,filterA被定义为接收三个参数的过滤器函数。其中 message的值作为第一个参数,普通字符串 arg1 作为第二个参数,表达式 arg2 的值作为第三个参数。`

相关文章

  • Vue如何动态渲染html

    数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值: Message: {{ msg ...

  • 富文本生成的HTML标签回显

    在vue中 vue为我们提供了v-html指令,我们可以通过 来实现回显 在网站上动态渲染任意 HTML 是非常危...

  • vue控制代码执行顺序之$nextTick()

    当动态渲染页面时,如何判断页面的DOM节点已经渲染完成? vue 有一个重要的概念:异步更新队列。Vue在观察到数...

  • Vue动态组件

    1、什么是动态组件? 动态组件指的是动态切换组件的显示与隐藏 2、如何实现动态组件渲染? vue提供了一个内置的<...

  • 【基础】Vue安装

    Vue安装 Vue官网:http://unpkg.com/vue 引入vue Vue数据渲染html {...

  • 滴滴面试题(二)

    一.当v-for中key相同时,vue如何判断,如何渲染 如果不使用 key,Vue 会使用一种最大限度减少动态元...

  • vue-动态组件

    1. 什么是动态组件 动态组件指的是动态切换组件的显示与隐藏。 2. 如何实现动态组件渲染 vue 提供了一个内置...

  • Vue 快速上手(实例)

    Vue 快速上手 实例1: 渲染声明 渲染声明是 vue 的最核心模块。 vue 基于传统的 HTML 模板语法,...

  • vue的动态组件 keep-alive

    1. 什么是动态组件 动态组件指的是 动态切换组件的显示与隐藏 2. 如何实现动态组件渲染 vue提供了一个内置的...

  • (转载)如何获取vue中模版渲染后的html字符串

    如何获取vue中模版渲染后的html字符串? 原文链接:https://www.zhihu.com/questio...

网友评论

    本文标题:Vue如何动态渲染html

    本文链接:https://www.haomeiwen.com/subject/bulapxtx.html