radio-group

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

单项选择器,内部由多个 radio 组成。

属性说明

属性 类型 默认值 必填 说明 最低版本
bindchange EventHandle radio-group中选中项发生改变时触发 change 事件,detail = {value:[选中的radio的value的数组]} 1.0.0

radio

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

单选项目。

属性说明

属性 类型 默认值 必填 说明 最低版本
value string radio 标识。当该radio 选中时,radio-group 的 change 事件会携带radio的value 1.0.0
checked boolean false 当前是否选中 1.0.0
disabled boolean false 是否禁用 1.0.0
color string #09BB07 radio的颜色,同css的color 1.0.0

示例代码

在开发者工具中预览效果

picker-view-column

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

滚动选择器子项。仅可放置于picker-view中,其孩子节点的高度会自动设置成与picker-view的选中框的高度一致

Bug & Tip

  1. tip: 若当前组件所在的页面或全局开启了 enablePassiveEvent 配置项,该内置组件可能会出现非预期表现(详情参考 enablePassiveEvent 文档)
  2. tip: 子节点建议添加 aria-role=optionaria-label 以增强无障碍支持。

picker-view

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

嵌入页面的滚动选择器。其中只可放置 picker-view-column 组件,其它节点不会显示。

目前滚动过程中 bindpickstart、bindpickend 会被触发多次,后续 skyline 升级会修复该问题 skyline 支持在 picker-view-column 上设置 indicator-style

通用属性

属性 类型 默认值 必填 说明 最低版本
value Array.<number> 数组中的数字依次表示 picker-view 内的 picker-view-column 选择的第几项(下标从 0 开始),数字大于 picker-view-column 可选项长度时,选择最后一项。 1.0.0
mask-class string 设置蒙层的类名 1.5.0
indicator-style string 设置选择器中间选中框的样式 1.0.0
bindchange eventhandle 滚动选择时触发 change 事件,event.detail = {value};value 为数组,表示 picker-view 内的 picker-view-column 当前选择的是第几项(下标从 0 开始) 1.0.0
bindpickstart eventhandle 当滚动选择开始时候触发事件 2.3.1
bindpickend eventhandle 当滚动选择结束时候触发事件 2.3.1

WebView 特有属性

属性 类型 默认值 必填 说明 最低版本
indicator-class string 设置选择器中间选中框的类名 1.1.0
mask-style string 设置蒙层的样式 1.5.0
immediate-change boolean false 是否在手指松开时立即触发 change 事件。若不开启则会在滚动动画结束后触发 change 事件。 2.21.1

Bug & Tip

  1. tip: 滚动时在 iOS 自带振动反馈,可在系统设置 -> 声音与触感 -> 系统触感反馈中关闭
  2. tip: indicator-style 属性 skyline 从基础库 3.3.4 开始支持,目前支持 heightborderbackground-color

示例代码

在开发者工具中预览效果

picker

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

从底部弹起的滚动选择器。

通用属性

属性 类型 默认值 必填 说明 最低版本
header-text string 选择器的标题,仅安卓可用 2.11.0
mode string selector 选择器类型 1.0.0
合法值 说明
selector 普通选择器
multiSelector 多列选择器
time 时间选择器
date 日期选择器
region 省市区选择器
disabled boolean false 是否禁用 1.0.0
bindcancel eventhandle 取消选择时触发 1.9.90

除了上述通用的属性,对于不同的mode,picker拥有不同的属性。

普通选择器:mode = selector

属性名 类型 默认值 说明 最低版本
range array/object array [] mode 为 selector 或 multiSelector 时,range 有效
range-key string 当 range 是一个 Object Array 时,通过 range-key 来指定 Object 中 key 的值作为选择器显示内容
value number 0 表示选择了 range 中的第几个(下标从 0 开始)
bindchange eventhandle value 改变时触发 change 事件,event.detail = {value}

多列选择器:mode = multiSelector

属性名 类型 默认值 说明 最低版本
range array/object array [] mode 为 selector 或 multiSelector 时,range 有效
range-key string 当 range 是一个 Object Array 时,通过 range-key 来指定 Object 中 key 的值作为选择器显示内容
value array [] 表示选择了 range 中的第几个(下标从 0 开始)
bindchange eventhandle value 改变时触发 change 事件,event.detail = {value}
bindcolumnchange eventhandle 列改变时触发

时间选择器:mode = time

属性名 类型 默认值 说明 最低版本
value string 表示选中的时间,格式为”hh:mm”
start string 表示有效时间范围的开始,字符串格式为”hh:mm”
end string 表示有效时间范围的结束,字符串格式为”hh:mm”
bindchange eventhandle value 改变时触发 change 事件,event.detail = {value}

日期选择器:mode = date

属性名 类型 默认值 说明 最低版本
value string 当天 表示选中的日期,格式为”YYYY-MM-DD”
start string 表示有效日期范围的开始,字符串格式为”YYYY-MM-DD”
end string 表示有效日期范围的结束,字符串格式为”YYYY-MM-DD”
fields string day 有效值 year,month,day,表示选择器的粒度
bindchange eventhandle value 改变时触发 change 事件,event.detail = {value}

fields 有效值:

说明
year 选择器粒度为年
month 选择器粒度为月份
day 选择器粒度为天

省市区选择器:mode = region 1.4.0

属性名 类型 默认值 说明 最低版本
value array [] 表示选中的省市区,默认选中每一列的第一个值
custom-item string 可为每一列的顶部添加一个自定义的项 1.5.0
level string region 选择器层级 2.21.1
bindchange eventhandle value 改变时触发 change 事件,event.detail = {value, code, postcode},其中字段 code 是统计用区划代码,postcode 是邮政编码

level 的有效值

说明
province 省级选择器
city 市级选择器
region 区级选择器
sub-district 街道选择器

示例代码

在开发者工具中预览效果

<view class="section">
  <view class="section__title">普通选择器</view>
  <picker bindchange="bindPickerChange" value="{{index}}" range="{{array}}">
    <view class="picker">
      当前选择:{{array[index]}}
    </view>
  </picker>
</view>
<view class="section">
  <view class="section__title">多列选择器</view>
  <picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
    <view class="picker">
      当前选择:{{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}
    </view>
  </picker>
</view>
<view class="section">
  <view class="section__title">时间选择器</view>
  <picker mode="time" value="{{time}}" start="09:01" end="21:01" bindchange="bindTimeChange">
    <view class="picker">
      当前选择: {{time}}
    </view>
  </picker>
</view>

<view class="section">
  <view class="section__title">日期选择器</view>
  <picker mode="date" value="{{date}}" start="2015-09-01" end="2017-09-01" bindchange="bindDateChange">
    <view class="picker">
      当前选择: {{date}}
    </view>
  </picker>
</view>
<view class="section">
  <view class="section__title">省市区选择器</view>
  <picker mode="region" bindchange="bindRegionChange" value="{{region}}" custom-item="{{customItem}}">
    <view class="picker">
      当前选择:{{region[0]}},{{region[1]}},{{region[2]}}
    </view>
  </picker>
</view>
Page({
  data: {
    array: ['美国', '中国', '巴西', '日本'],
    objectArray: [
      {
        id: 0,
        name: '美国'
      },
      {
        id: 1,
        name: '中国'
      },
      {
        id: 2,
        name: '巴西'
      },
      {
        id: 3,
        name: '日本'
      }
    ],
    index: 0,
    multiArray: [['无脊柱动物', '脊柱动物'], ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物'], ['猪肉绦虫', '吸血虫']],
    objectMultiArray: [
      [
        {
          id: 0,
          name: '无脊柱动物'
        },
        {
          id: 1,
          name: '脊柱动物'
        }
      ], [
        {
          id: 0,
          name: '扁性动物'
        },
        {
          id: 1,
          name: '线形动物'
        },
        {
          id: 2,
          name: '环节动物'
        },
        {
          id: 3,
          name: '软体动物'
        },
        {
          id: 4,
          name: '节肢动物'
        }
      ], [
        {
          id: 0,
          name: '猪肉绦虫'
        },
        {
          id: 1,
          name: '吸血虫'
        }
      ]
    ],
    multiIndex: [0, 0, 0],
    date: '2016-09-01',
    time: '12:01',
    region: ['广东省', '广州市', '海珠区'],
    customItem: '全部'
  },
  bindPickerChange: function(e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      index: e.detail.value
    })
  },
  bindMultiPickerChange: function (e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      multiIndex: e.detail.value
    })
  },
  bindMultiPickerColumnChange: function (e) {
    console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
    var data = {
      multiArray: this.data.multiArray,
      multiIndex: this.data.multiIndex
    };
    data.multiIndex[e.detail.column] = e.detail.value;
    switch (e.detail.column) {
      case 0:
        switch (data.multiIndex[0]) {
          case 0:
            data.multiArray[1] = ['扁性动物', '线形动物', '环节动物', '软体动物', '节肢动物'];
            data.multiArray[2] = ['猪肉绦虫', '吸血虫'];
            break;
          case 1:
            data.multiArray[1] = ['鱼', '两栖动物', '爬行动物'];
            data.multiArray[2] = ['鲫鱼', '带鱼'];
            break;
        }
        data.multiIndex[1] = 0;
        data.multiIndex[2] = 0;
        break;
      case 1:
        switch (data.multiIndex[0]) {
          case 0:
            switch (data.multiIndex[1]) {
              case 0:
                data.multiArray[2] = ['猪肉绦虫', '吸血虫'];
                break;
              case 1:
                data.multiArray[2] = ['蛔虫'];
                break;
              case 2:
                data.multiArray[2] = ['蚂蚁', '蚂蟥'];
                break;
              case 3:
                data.multiArray[2] = ['河蚌', '蜗牛', '蛞蝓'];
                break;
              case 4:
                data.multiArray[2] = ['昆虫', '甲壳动物', '蛛形动物', '多足动物'];
                break;
            }
            break;
          case 1:
            switch (data.multiIndex[1]) {
              case 0:
                data.multiArray[2] = ['鲫鱼', '带鱼'];
                break;
              case 1:
                data.multiArray[2] = ['青蛙', '娃娃鱼'];
                break;
              case 2:
                data.multiArray[2] = ['蜥蜴', '龟', '壁虎'];
                break;
            }
            break;
        }
        data.multiIndex[2] = 0;
        break;
    }
    console.log(data.multiIndex);
    this.setData(data);
  },
  bindDateChange: function(e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      date: e.detail.value
    })
  },
  bindTimeChange: function(e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      time: e.detail.value
    })
  },
  bindRegionChange: function (e) {
    console.log('picker发送选择改变,携带值为', e.detail.value)
    this.setData({
      region: e.detail.value
    })
  }
})

label

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

用来改进表单组件的可用性。

使用 for 属性找到对应的 id,或者将控件放在该标签下,当点击时,就会触发对应的控件。 for 优先级高于内部控件,内部有多个控件的时候默认触发第一个控件。 目前可以绑定的控件有:button, checkbox, radio, switch, input。

属性说明

属性 类型 默认值 必填 说明 最低版本
for string 绑定控件的 id 1.0.0

示例代码

在开发者工具中预览效果

键盘辅助

基础库 2.15.0 开始支持,低版本需做兼容处理。

渲染框架支持情况:WebView

功能描述

设置 input / textarea 聚焦时键盘上方 cover-view / cover-image 工具栏视图

Bug & Tip

  1. tip: 视图最大高度为 200px

示例代码

在开发者工具中预览效果

<textarea hold-keyboard="{{true}}">
  <keyboard-accessory class="container" style="height: 50px;">
    <cover-view bindtap="tap" style="flex: 1; background: green;">1</cover-view>
    <cover-view bindtap="tap" style="flex: 1; background: red;">2</cover-view>
  </keyboard-accessory>
</textarea>

微信小程序

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

输入框。该组件是原生组件,使用时请注意相关限制

通用属性

属性 类型 默认值 必填 说明 最低版本
value string 输入框的初始内容 1.0.0
type string text input 的类型 1.0.0
合法值 说明 最低版本
text 文本输入键盘
number 数字输入键盘
idcard 身份证输入键盘
digit 带小数点的数字键盘
safe-password 密码安全输入键盘 指引。仅 Webview 支持。 2.18.0
nickname 昵称输入键盘。 2.21.2
password boolean false 是否是密码类型 1.0.0
placeholder string 输入框为空时占位符 1.0.0
placeholder-style string 指定 placeholder 的样式 1.0.0
disabled boolean false 是否禁用 1.0.0
maxlength number 140 最大输入长度,设置为 -1 的时候不限制最大长度 1.0.0
cursor-spacing number 0 指定光标与键盘的距离,取 input 距离底部的距离和 cursor-spacing 指定的距离的最小值作为光标与键盘的距离 1.0.0
auto-focus boolean false (即将废弃,请直接使用 focus )自动聚焦,拉起键盘 1.0.0
focus boolean false 获取焦点 1.0.0
confirm-type string done 设置键盘右下角按钮的文字,仅在type=’text’时生效 1.1.0
合法值 说明
send 右下角按钮为“发送”
search 右下角按钮为“搜索”
next 右下角按钮为“下一个”
go 右下角按钮为“前往”
done 右下角按钮为“完成”
always-embed boolean false 强制 input 处于同层状态,默认 focus 时 input 会切到非同层状态 (仅在 iOS 下生效) 2.10.4
confirm-hold boolean false 点击键盘右下角按钮时是否保持键盘不收起 1.1.0
cursor number 指定focus时的光标位置 1.5.0
cursor-color string 光标颜色。iOS 下的格式为十六进制颜色值 #000000,安卓下的只支持 default 和 green,Skyline 下无限制 3.1.0
selection-start number -1 光标起始位置,自动聚集时有效,需与selection-end搭配使用 1.9.0
selection-end number -1 光标结束位置,自动聚集时有效,需与selection-start搭配使用 1.9.0
adjust-position boolean true 键盘弹起时,是否自动上推页面 1.9.90
hold-keyboard boolean false focus时,点击页面的时候不收起键盘 2.8.2
safe-password-cert-path string 安全键盘加密公钥的路径,只支持包内路径。鸿蒙 OS 暂不支持 2.18.0
safe-password-length number 安全键盘输入密码长度。鸿蒙 OS 暂不支持 2.18.0
safe-password-time-stamp number 安全键盘加密时间戳。鸿蒙 OS 暂不支持 2.18.0
safe-password-nonce string 安全键盘加密盐值。鸿蒙 OS 暂不支持 2.18.0
safe-password-salt string 安全键盘计算hash盐值,若指定custom-hash 则无效。鸿蒙 OS 暂不支持 2.18.0
safe-password-custom-hash string 安全键盘计算hash的算法表达式,如 md5(sha1('foo' + sha256(sm3(password + 'bar'))))。鸿蒙 OS 暂不支持 2.18.0
bindinput eventhandle 键盘输入时或内容改变时触发。event.detail = { value: string, cursor?: number, keyCode?: number },cursor 为光标位置,keyCode 为键值。从 2.1.0 版本开始支持,处理函数可以直接 return 一个字符串,这个字符串会替换输入框的内容。 1.0.0
bindchange eventhandle 键盘非聚焦状态内容改变时触发。event.detail = { value: string } 1.0.0
bindfocus eventhandle 输入框聚焦时触发,event.detail = { value: string, height: number },height 为键盘高度,从基础库 1.9.90 版本开始支持 1.0.0
bindblur eventhandle 输入框失去焦点时触发,event.detail = { value: string, encryptedValue?: string, encryptError?: string } 1.0.0
bindconfirm eventhandle 点击完成按钮时触发,event.detail = { value: string, encryptedValue?: string, encryptError?: string } 1.0.0
bindkeyboardheightchange eventhandle 键盘高度发生变化的时候触发此事件,event.detail = {height: number, duration: number} 2.7.0
bindnicknamereview eventhandle 用户昵称审核完毕后触发,仅在 type 为 “nickname” 时有效,event.detail = { pass: boolean, timeout: boolean } 2.29.1

Skyline 特有属性

属性 类型 默认值 必填 说明 最低版本
bind:selectionchange eventhandle 选区改变事件, {selectionStart, selectionEnd} 3.2.0
bind:keyboardcompositionstart eventhandle 输入法开始新的输入时触发(仅当输入法支持时触发) 3.2.0
bind:keyboardcompositionupdate eventhandle 输入法输入字符时触发(仅当输入法支持时触发) 3.2.0
bind:keyboardcompositionend eventhandle 输入法输入结束时触发(仅当输入法支持时触发) 3.2.0
worklet:onkeyboardheightchange worklet 键盘高度变化时触发。event.detail = {height: height, pageBottomPadding: pageBottomPadding}; height: 键盘高度,pageBottomPadding: 页面上推高度 3.2.4

WebView 特有属性

属性 类型 默认值 必填 说明 最低版本
placeholder-class string input-placeholder 指定 placeholder 的样式类 1.0.0

Bug & Tip

  1. tip: confirm-type的最终表现与手机输入法本身的实现有关,部分安卓系统输入法和第三方输入法可能不支持或不完全支持
  2. tip : input 组件是一个原生组件,字体是系统字体,所以无法设置 font-family
  3. tip : 在 input 聚焦期间,避免使用 css 动画
  4. tip : 对于将 input 封装在自定义组件中、而 form 在自定义组件外的情况, form 将不能获得这个自定义组件中 input 的值。此时需要使用自定义组件的 内置 behaviors wx://form-field
  5. tip : 键盘高度发生变化,keyboardheightchange事件可能会多次触发,开发者对于相同的height值应该忽略掉
  6. bug : 微信版本 6.3.30, focus 属性设置无效
  7. bug : 微信版本 6.3.30, placeholder 在聚焦时出现重影问题

示例代码

在开发者工具中预览效果

form

基础库 1.0.0 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

相关文档: 聊天工具模式

渲染框架支持情况:Skyline (使用最新 Nightly 工具调试)、WebView

功能描述

表单。将组件内的用户输入的 switch、input、checkbox、slider、radio、picker 等表单控件的内容提交。

当点击微信小程序表单中 form-type 为 submit 的 button 组件时,会将表单组件中的 value 值进行提交,需要在表单组件中加上 name 来作为 key。

属性说明

属性 类型 默认值 必填 说明 最低版本
report-submit boolean false 是否返回 formId 用于发送模板消息 1.0.0
report-submit-timeout number 0 等待一段时间(毫秒数)以确认 formId 是否生效。如果未指定这个参数,formId 有很小的概率是无效的(如遇到网络失败的情况)。指定这个参数将可以检测 formId 是否有效,以这个参数的时间作为这项检测的超时时间。如果失败,将返回 requestFormId:fail 开头的 formId 2.6.2
bindsubmit eventhandle 携带 form 中的数据触发 submit 事件,event.detail = {value : {‘name’ : ‘value’} , formId: ”} 1.0.0
bindreset eventhandle 表单重置时会触发 reset 事件 1.0.0
bindsubmitToGroup eventhandle 用户发送文本到聊天后触发,但不代表最终发送成功 3.7.8

发送文本到群示例代码

需结合 button 和 textarea 组件使用。 button 需要设置 form-type="submitToGroup",此时点击按钮将会发送 textarea 的内容到聊天。

<form bind:submitToGroup="onSubmitToGroup">
    <textarea value="{{shareText}}" />
    <button
    form-type="submitToGroup"
    need-show-entrance="{{true}}"
    entrance-path=""
    ></button>
</form>

示例代码

// 在开发者工具中预览效果

使用内置 behaviors

对于微信小程序的 form 组件,目前可以自动识别下列内置 behaviors:

wx://form-field

wx://form-field-group

wx://form-field-button

wx://form-field

使自定义组件有类似于表单控件的行为。 微信小程序的 form 组件可以识别这些自定义组件,并在 submit 事件中返回组件的字段名及其对应字段值。这将为它添加以下两个属性。

属性名 类型 描述 最低版本
name String 在表单中的字段名 1.6.7
value 任意 在表单中的字段值 1.6.7

代码示例: 在开发者工具中预览效果

// custom-form-field.js
Component({
 behaviors: ['wx://form-field'],
 data: {
   value: ''
 },
 methods: {
   onChange: function (e) {
     this.setData({
       value: e.detail.value,
     })
   }
 }
})

wx://form-field-group

从基础库版本 2.10.2 开始提供支持。

代码示例: 在开发者工具中预览效果

使微信小程序的 form 组件可以识别到这个自定义组件内部的所有表单控件。 例如,页面的结构如下:

<form bindsubmit="submit">
  <custom-comp></custom-comp>
  <button form-type="submit">submit</button>
</form>

组件 custom-comp 自身结构如下:

<input name="name" />
<switch name="student" />

如果组件 custom-comp 配置有:

Component({
 behaviors: ['wx://form-field-group']
})

此时,表单的 submit 事件的 value 中将包含 namestudent 两个字段。

wx://form-field-button

从基础库版本 2.10.3 开始提供支持。

代码示例: 在开发者工具中预览效果

使微信小程序的 form 组件可以识别到这个自定义组件内部的 button , 如果自定义组件内部有设置了 form-type 的 button ,它将被组件外的 form 接受。 例如,页面的结构如下:

<form bindsubmit="submit">
  <input name="name" placeholder="请输入名字"></input>
  <custom-comp></custom-comp>
</form>

组件 custom-comp 自身结构如下:

<button form-type="submit">submit</button>

如果组件 custom-comp 配置有:

Component({
 behaviors: ['wx://form-field-button']
})

此时点击组件内的 button ,将触发 form 的 submit 事件。

editor-portal

基础库 3.7.11 开始支持,低版本需做兼容处理。

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

渲染框架支持情况:WebView

功能描述

渲染微信小程序 editor 组件的自定义区块。相关接口 EditorCtx.insertCustomBlock。

属性说明

属性 类型 默认值 必填 说明
key string 自定义区块的 blockId

使用方法

插入自定义区块

  1. 使用 EditorContext.insertCustomBlock 插入自定义区块(此时仅占位),获取返回的 blockId
  2. 渲染 <editor-portal> 组件,并指定 key 属性为 blockId<editor-portal> 中的内容将插入到自定义区块的位置;

重新渲染自定义区块

自定义区块的结构和数据需要分开存储。建议编辑区内容使用返回的delta 数据结构存储,更为精简。

  1. 通过 EditorContext.getContents 获取编辑区内容,此时 delta 中自定义块仅保存对应的 blockId;
  2. 开发者需自行保存自定义块对应的数据内容,按 blockId 映射;
  3. 通过 EditorContext.setContents 设置编辑区内容时,同时渲染 <editor-portal> 组件替换自定义区块的内容;

示例代码

在开发者工具中预览效果

<editor id="editor">
  <block wx:for="{{customBlockList}}" wx:key="blockId">
    <editor-portal key="{{item.blockId}}">
      <view class="flex"></view>
    </editor-portal>
  </block>
</editor>
Page({
  insertCustomBlock() {
    const { customBlockList } = this.data
    this.editorCtx.insertCustomBlock({
      success:(res) => {
        customBlockList.push({
          blockId: res.blockId
        })
        this.setData({ customBlockList })
      }
    })
  }
})