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 相关文章推荐
javascript自定义startWith()和endWith()的两种方法
Nov 11 Javascript
JQuery的ready函数与JS的onload的区别详解
Nov 21 Javascript
js实现倒计时时钟的示例代码
Dec 17 Javascript
jquery获取html元素的绝对位置和相对位置的方法
Jun 20 Javascript
一个JavaScript操作元素定位元素的实例
Oct 29 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
Aug 24 Javascript
ReactNative页面跳转实例代码
Sep 27 Javascript
基于jquery实现多级菜单效果
Jul 25 jQuery
three.js实现3D影院的原理的代码分析
Dec 18 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
Jan 04 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
Aug 25 Javascript
JavaScript实现猜数字游戏
May 20 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
php访问查询mysql数据的三种方法
2006/10/09 PHP
落伍首发 php+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
php中看实例学正则表达式
2006/12/25 PHP
PHP 作用域解析运算符(::)
2010/07/27 PHP
PHP可变函数的使用详解
2013/06/14 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
jQuery 常见操作实现方式和常用函数方法总结
2011/05/06 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
用JavaScript实现动画效果的方法
2013/07/20 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
node使用promise替代回调函数
2018/05/07 Javascript
vue.js input框之间赋值方法
2018/08/24 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
中学生操行评语大全
2014/04/24 职场文书
和睦家庭事迹
2014/05/14 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
镇副书记专题民主生活会对照检查材料思想汇报
2014/10/02 职场文书
论群众路线学习笔记
2014/11/06 职场文书
党员年度个人总结
2015/02/14 职场文书
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技