Vue如何动态渲染html 您所在的位置:网站首页 渲染html Vue如何动态渲染html

Vue如何动态渲染html

#Vue如何动态渲染html| 来源: 网络整理| 查看: 265

Vue 大家在使用Vue时,一般使用{{ Mustache }}或者v-text进行插值,对此,官方给出的解释是:

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

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

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

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

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

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

过滤器

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

{{ message | capitalize }} 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, ';') .replace(/;/g, "") .replace(/;/g, "\"") .replace(/'/g, "\'"); } }

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

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

渲染成功

大功告成( ⊙ o ⊙ )!

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有