经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Vue.js » 查看文章
vue项目中字符串换行显示方式(返回的数据包含‘\r\n’字符)
来源:jb51  时间:2023/4/24 8:50:28  对本文有异议

vue项目中字符串换行显示

在vue项目中,请求后端接口获取到的数据是一整条字符串,如:‘1、和加速度和环境,\r\n2、技术的进步是否,\r\n3、讲述的就是不对’

(数据是随意的,各位大佬别纠结(~~))

这种格式的文本数据我们希望在界面中展示是换行的, 如下:

  • 1、和加速度和环境
  • 2、技术的进步是否
  • 3、讲述的就是不对

但是在vue项目中,数据渲染时无法识别换行符‘\r\n’

处理方法

先定义一个字符串数据

  1. var str = '1、和加速度和环境,\r\n2、技术的进步是否,\r\n3、讲述的就是不对'

1、拿到数据先对字符串数据进行处理,使用replace()函数或split().join()方式处理数据; 

replace()函数处理方式:

  1. str.replace(/\\r\\n/g, '<br/>')

一波解释:正则全局检索‘\r\n’字符,用‘br’标签替换(用br标签替换是有原因的,下面解释) 

split()函数处理方式:

  1. split(/\\r\\n/g).join('<br/>')

用split()函数处理,是先检索‘\r\n’字符切割成数组,我们拿到的数据是arr格式的,arr[0]就是‘1、和加速度和环境,’,因此需要用join()重新拼接并插入‘br’标签字符。

2、将str数据渲染到组件中:

拿到数据:

  1. var data = str.replace(/\\r\\n/g, '<br/>')

渲染到组件中:

  1. <div v-html="data"></div>

强调!强调!强调!这里要用v-html!

踩坑记录(记得抽空瞄一眼,很重要!) 

1、关于正则判断的踩坑:

用正则判定时踩了几个坑,用replace()函数处理时,一种写法是str.replace(/\r\n/g, ‘’),这种写法在Google浏览器控制台中编译的时候是生效的,但是在vue项目中运行时无效。

因此,需要用比较严谨的正则方式,字符串中的\是特殊字符,检索是需要转义,在正则中需要转义的字段要在前面加上斜杠

所以最后需要写成**/\r\n/g**的格式,/g是正则全局判断的意思。

2、使用br标签替换的原因:

后端返回的字符串数据,换行符是**\r\n**,在前端渲染时,会发现,直接将字符串渲染时是无法识别的,有些道友会发现,\n也是可以换行的,比如在标签中直接渲染字符串。但是在vue项目中,在标签中使用 {{}} 渲染变量数据时是无法识别换行的。

同样的,用br标签替换之后使用 {{}} 渲染变量数据也是无法识别的,因此要用v-html方法替换 {{}} 方法渲染。

vue字符串换行问题及vue路由跳转传参

vue 中 用 {{}} 进行数据绑定的时候,如果想让字符串换行是不会生效,

解决办法,不用上边的方式进行数据绑定,用v-html标签代替{{}}

  1. //table中columns的列对象中引入插槽knTags
  2. columns: [
  3. ?? ?{
  4. ?? ??? ?title:'标题',
  5. ?? ??? ?align:"center",
  6. ?? ??? ?dataIndex: 'backTag',//渲染的字段
  7. ?? ??? ?scopedSlots: { customRender: 'knTags' },
  8. ?? ??? ?ellipsis: true //字数超出显示省略号
  9. ?? ?},
  10. ?? ?{
  11. ?? ?...
  12. ?? ?}]
  1. //knTags插槽中自定义展现的数据
  2. <template slot="knTags" slot-scope="text,record">
  3. //text为表格渲染的字段backTag的数据
  4. //record为动态传给table渲染的的json本条所有数据
  5. <a v-if="record.remarkContent.trim()==''" v-html="text"></a>
  6. <a v-else :title="'摘要:<br>'+record.remarkContent.trim()">{{text}}</a>
  7. </template>
  8.  
  9. //假设text的数据
  10. record.text=“第一行<br/>第二行”;
  11.  
  12. 输出结果:
  13. ------------------------------------------------
  14. “第一行<br/>第二行”
  15. ------------------------------------------------
  16. 第一行
  17. 第二行
  18. ------------------------------------------------

解决方法 加入 路由a 跳转到 路由b:

  1. ?data () {
  2. ? ? return {
  3. ? ? ? url: {
  4. ? ? ? ?? ? ?lookCaseUrl:"/aaaa/bbbb/ccccc",//项目接口地址
  5. ? ? ? ? ?editKnUrl:"aaaa-bbbbb-cccccc"//框架页面地址
  6. ? ? ? ?}
  7. ? ? ?}
  8. ? ? }
  9.  
  10. //a页面路由跳转b传参
  11. that.$router.push({
  12. ?? ?name:that.url.editKnUrl,
  13. ?? ?params:
  14. ?? ??? ?{idMedias : info.file.id,
  15. ?? ? ?? ? keys ? ? : res
  16. ?? ? }
  17. });
  18.  
  19. //b页面的方法中接受路由传过来的参数
  20. this.$route.params.idMedias?
  21. this.$route.params.keys

项目开发过程中遇到的问题! 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号