Administrator
发布于 2021-11-23 / 5 阅读
0
0

微信小程序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)}} ```

评论