vue项目中字符串换行显示方式(返回的数据包含‘\r\n’字符)
vue项目中字符串换行显示
在vue项目中,请求后端接口获取到的数据是一整条字符串,如:‘1、和加速度和环境,\r\n2、技术的进步是否,\r\n3、讲述的就是不对’
(数据是随意的,各位大佬别纠结(~~))
这种格式的文本数据我们希望在界面中展示是换行的, 如下:
- 1、和加速度和环境
- 2、技术的进步是否
- 3、讲述的就是不对
但是在vue项目中,数据渲染时无法识别换行符‘\r\n’
处理方法
先定义一个字符串数据
var str = '1、和加速度和环境,\r\n2、技术的进步是否,\r\n3、讲述的就是不对'
1、拿到数据先对字符串数据进行处理,使用replace()函数或split().join()方式处理数据;
replace()函数处理方式:
str.replace(/\\r\\n/g, '<br/>')
一波解释:正则全局检索‘\r\n’字符,用‘br’标签替换(用br标签替换是有原因的,下面解释)
split()函数处理方式:
split(/\\r\\n/g).join('<br/>')
用split()函数处理,是先检索‘\r\n’字符切割成数组,我们拿到的数据是arr格式的,arr[0]就是‘1、和加速度和环境,’,因此需要用join()重新拼接并插入‘br’标签字符。
2、将str数据渲染到组件中:
拿到数据:
var data = str.replace(/\\r\\n/g, '<br/>')
渲染到组件中:
<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标签代替{{}}
//table中columns的列对象中引入插槽knTags
columns: [
{
title:'标题',
align:"center",
dataIndex: 'backTag',//渲染的字段
scopedSlots: { customRender: 'knTags' },
ellipsis: true //字数超出显示省略号
},
{
...
}]
//knTags插槽中自定义展现的数据
<template slot="knTags" slot-scope="text,record">
//text为表格渲染的字段backTag的数据
//record为动态传给table渲染的的json本条所有数据
<a v-if="record.remarkContent.trim()==''" v-html="text"></a>
<a v-else :title="'摘要:<br>'+record.remarkContent.trim()">{{text}}</a>
</template>
//假设text的数据
record.text=“第一行<br/>第二行”;
输出结果:
------------------------------------------------
“第一行<br/>第二行”
------------------------------------------------
第一行
第二行
------------------------------------------------
解决方法 加入 路由a 跳转到 路由b:
data () {
return {
url: {
lookCaseUrl:"/aaaa/bbbb/ccccc",//项目接口地址
editKnUrl:"aaaa-bbbbb-cccccc"//框架页面地址
}
}
}
//a页面路由跳转b传参
that.$router.push({
name:that.url.editKnUrl,
params:
{idMedias : info.file.id,
keys : res
}
});
//b页面的方法中接受路由传过来的参数
this.$route.params.idMedias
this.$route.params.keys
项目开发过程中遇到的问题!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341