微信小程序setData()时 字符串中的 \n 会变成 \\n 的问题
### 问题
最近在做微信小程序的时候遇到一个问题,要展示一段字符串,字符串中有换行操作,但又不是富文本,所以加了换行符`\n`。
从服务端获取数据,打印得到的都是正确的,但通过`setData()`赋值后,小程序`AppData`数据中的`\n`却变成了`\\n`,导致页面显示为`n`而没有换行,怎么设置都不行。
### 解决
通过`WXS 语法参考`在页面上显示前,使用函数将`\\n`替换为`\n`,实现如下。
> WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。
WXS 与 JavaScript 是不同的语言,有自己的语法,并不和 JavaScript 一致。
#### Plan A 使用wxs标签
原版渲染
```HTML
{{content}}
```
修改后的渲染
```HTML
var formatText = function (text) {
if (!text) {
return '';
}
var reg = getRegExp('\\\\n', 'g')
return text.replace(reg,'\n');
}
module.exports = {
formatText: formatText
}
{{util.formatText(content)}}
```
#### Plan B 使用wxs文件
如果方法内容复杂,或可复用的话则可以使用`wxs`文件
新建`filter.wxs`文件,文件内容如下
```JavaScript
var formatText = function (text) {
if (!text) {
return '';
}
var reg = getRegExp('\\\\n', 'g')
return text.replace(reg,'\n');
}
module.exports = {
formatText: formatText
}
```
在需要使用的`wxml`中导入`wxs`模块
```HTML
```
在`text`标签中使用时,需要使用`util.formatText()`的方法将服务器返回的数据当做参数传到方法中就可以了
```HTML
{{util.formatText(content)}}
```