vue中将html字符串转换成html后遇到的问题小结


Posted in Javascript onDecember 10, 2018

今天整理之前做vue项目时遇到的一些问题,发现了当时遇到的一个很小但是又会引出很多问题的一个问题(总之就是很有意思,听我慢慢给你到来),这个问题就是当时处理后端数据时,如何将后端返回来的字符串转换成html标签,其实根据vue官网的一个v-html方法是不是觉得很简单,当时我也是这样想的,可是我发现了几个问题(官网给出的动态渲染任意 HTML 容易导致 XSS 攻击的问题我就不说了,在这里我只是用它来渲染数据):

第一,当我用v-html将后端字符串转换成了html标签后,发现我在那个字符串中解析出来的html里面设置的样式没有加上;

第二,当我们使用v-html的时候,是会自动生成一个div标签的,有时候这个小小的div标签可能会影响到我们的布局,这个时候你会想到用template来替代div不就完事了,可是很不幸,给出我试验后的结果让你看看吧

<div v-html="'<p>渴望成为大牛的男人</p>'"></div>





//页面上成功渲染出了我们想要的p标签,但同时它的外围也被一个div标签包裹着
<template v-html="'<p>渴望成为大牛的男人</p>'"></template>



//页面上并没有出现我们想要的这个p标签

   有没有发现一个小小的需求就会带来很多意想不到的问题,让我不禁感叹,代码的世界真的是神奇啊,废话不多说,接下来我给出这两个问题的解法

我们先来解决第一个问题:

    解决这个问题的开始,我们要先了解一下scoped,在vue中,当你在一个style标签上加了scoped属性时,这个style标签内的样式将会被锁死在当前这个组件内,为的就是避免我们的样式出现混乱,假如说你的项目中如果每个style标签上都加了scroped这个属性,从某种意义上说就相当于实现了样式的模块化。

为什么我要说scoped这个属性,因为在你加了scroped之后,当你引用一些第三方组件,比如swiper,当你想要去覆盖它的样式的时候,你会发现覆盖不了,那么我们后来通过v-html引入的html元素肯定也逃不掉,这个时候我们可以通过一种特殊的方式,穿透scoped,比如这样:

<style scoped>
  >>>需要穿透的类名 {
    样式
  }
</style>

嗯对,就是这个姿势,我们使用>>>就可以实现一个穿透效果,让我们在使用scoped的情况下,去修改其他组件的样式,还有另外一种方法就是你可以把需要穿透的样式写到另一个style标签中,不加scoped,这样也可以,看你个人需求。

接下来我们解决第二个问题,同时我们把这个问题转化为如何将一个html字符串转换为html元素:

在这里我们可以想将一个html字符串转换为html元素的话,我想到的办法就只能进行DOM操作了,在vue中,要进行DOM操作的话,我们可以使用自定义指令,如果有小伙伴对自定义指令不了解的话,可以去vue的官方文档先看下自定义指令是什么,官网链接:https://cn.vuejs.org/v2/guide/custom-directive.html

解决这个问题的大致思路是这样的:我们可以在要加入这个html字符串的元素绑定一个自定义指令,我们在data中定义一个htmlStr变量用来存储字符串,绑定到我们的自定义指令上,然后在我们这个自定义指令中我们可以获取到这个当前这个元素的dom节点还有我们需要解析的字符串,我们通过原生js的innerHtml方法将字符串渲染到页面上即可:

data(){
    return {
      htmlStr:'<p>渴望成为大牛的男人</p>'   //你可以把后端html字符串数据来赋值给htmlStr
    }
  },
<main v-exchangeHtml:foo='htmlStr'>   //定义自定义指令
//全局注册自定义指令
Vue.directive('exchangeHtml',{   
  bind: function(el,foo){
   console.log(el,foo)
   el.innerHTML += foo.value
 }
})

我把el和foo打印出来,以便大家理解,这是打印出来的结果

vue中将html字符串转换成html后遇到的问题小结

自此,我们就完成了直接将html字符串转换成我们需要的html元素并且添加了进来

总结

以上所述是小编给大家介绍的vue中将html字符串转换成html后遇到的问题小结 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
extjs DataReader、JsonReader、XmlReader的构造方法
Nov 07 Javascript
深入分析原生JavaScript事件
Dec 29 Javascript
JavaScript生成.xls文件的代码
Dec 22 Javascript
div实现自适应高度的textarea实现angular双向绑定
Jan 08 Javascript
微信小程序实现鼠标拖动效果示例
Dec 01 Javascript
详解如何在你的Vue项目配置vux
Jun 04 Javascript
js实现删除li标签一行内容
Apr 16 Javascript
基于JavaScript 实现拖放功能
Sep 12 Javascript
Javascript地址引用代码实例解析
Feb 25 Javascript
vue过滤器实现日期格式化的案例分析
Jul 02 Javascript
JS PHP字符串截取函数实现原理解析
Aug 29 Javascript
仿照Element-ui实现一个简易的$message方法
Sep 14 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
Dec 10 #Javascript
Bootstrap 实现表格样式、表单布局的实例代码
Dec 09 #Javascript
Bootstrap 按钮样式与使用代码详解
Dec 09 #Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
Dec 09 #Javascript
vue form check 表单验证的实现代码
Dec 09 #Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
Dec 09 #Javascript
vue打包之后生成一个配置文件修改接口的方法
Dec 09 #Javascript
You might like
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
2015/12/29 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
详解js的六大数据类型
2016/12/27 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
将Python的Django框架与认证系统整合的方法
2015/07/24 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
python3.4.3下逐行读入txt文本并去重的方法
2018/04/29 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
Python高阶函数、常用内置函数用法实例分析
2019/12/26 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
Bootstrap 学习分享
2012/11/12 HTML / CSS
世界上最大的街头服饰网站:Karmaloop
2017/02/04 全球购物
台湾专柜女包:KINAZ
2019/12/26 全球购物
清明节网上祭英烈活动总结
2014/04/30 职场文书
天猫活动策划方案
2014/08/21 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
2014新生大学四年计划书
2014/09/21 职场文书
道歉的话语大全
2015/05/12 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
导游词之河北野三坡
2019/12/11 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL