电商类的应用在做商品详情页时经常使用富文本编辑器
微信小程序里展示的商品数据往往是从后端请求来的,包含div等标签结构和样式的富文本数据
那么,如何在微信小程序里直接展示这些数据呢?微信小程序从1.4.0版本开始支持富文本组件,就可以解决这个问题
rich-text
有一个nodes
属性,支持数组和字符串类型的数据
- 当nodes的值为数组时,是一组HTML节点的列表
- 当nodes值是字符串时,则是HTML字符串
代码如下所示
<view>
<rich-text node="<div>这是一个富文本节点</div>"></rich-text>
</view>
rich-text支持两种节点,通过type区分,分别是元素节点和文本节点,默认是元素节点
(1)元素节点:type = node,如表3.2所示
属性名 | 说明 | 类型 | 必填 | 备注 |
---|---|---|---|---|
name | 标签名 | String | 是 | 支持部分受信任的HTML节点 |
attrs | 属性 | Object | 否 | 支持部分受信任的属性,遵循Pascal命名法 |
children | 子节点列表 | Array | 否 | 结构和nodes一致 |
(2)文本节点:type = text,如表3.3所示
属性名 | 说明 | 类型 | 必填 | 备注 |
---|---|---|---|---|
text | 文本 | String | 是 | 支持entities |
展示了如何使用rich-text组件
index.wxml
<view class='container'>
<view>
<view>传入HTML字符串</view>
<view>
<rich-text nodes="{{html}}"></rich-text>
</view>
</view>
<view>
<view>传入节点列表</view>
<view>
<rich-text nodes="{{nodes}}"></rich-text>
</view>
</view>
</view>
---------------------------------------------------------------------------------------
index.js
Page({
data: {
html: '<div style="line-height: 60px; color: red;">Hello World!<p style="font-size: 50px;
color: green;">ho ho </p ></div>',
nodes: [{
name: 'div',
attrs: {
style: 'line-height: 60px; color: red;'
},
children: [{
type: 'text',
text: 'Hello World!'
},
{
name: 'p',
attrs: {
style: 'font-size: 50px; color: green;'
},
children: [{
type: 'text',
text: 'ho ho'
}]
}]
}]
}
})
在示例3-3中,用两种方式使用rich-text
第一个rich-text组件的nodes属性值为HTML节点字符串
第二个rich-text组件的nodes属性值为数组,数组的每个元素都是一个节点