Rich Text Editing
WdRichText
Applicable Scenarios
A rich text form component that allows adjusting text styles and supports inserting images, links, and other content.
Basic Capabilities
The rich text editing component can bind to Rich Text type fields, enabling data entry and display of queried data.
- After creating a data model, add a Rich Text type field in the model.
- In the page editor, place the "Form Container" component and bind it to the data model. The "Rich Text" field will be automatically rendered as a "Rich Text Editor" component, where rich text content can be entered.
Extended Scenarios
Rich text content can be displayed and viewed using the 'Rich Text Display' component.
After binding the "Data Details" or "Data List" component to the data model, place the "Rich Text Display" component within it and bind its content property to the Rich Text type field. This enables the display of rich text content stored in the field.
Other Scenario Practices
Refer to the Form Scenario Practice Guide to learn about various supported scenarios and implementation solutions for forms.
Example
Interactive Preview
Component Input State
Style API Example
#wd-page-root .wd-form-item.wd-pc-rich-text-root .wd-rich-text__label {
color: #05c3c3;
display: flex;
justify-content: center;
align-items: center;
}
#wd-page-root .wd-pc-rich-text-root {
color: red;
}
Properties
组件接收的外部传入的属性
属性名 | 属性标识 | 类型 | 说明 |
---|
显示标题 | labelVisible | boolean | 默认值:true |
标题对齐 | labelAlign | string | 表单场景下默认会跟随表单容器的标题对齐配置 |
标题换行 | labelWrap | boolean | 如果标题内容过长关闭时只显示一行、溢出省略;开启时换行展示。表单场景下默认会跟随表单容器的标题换行配置 |
标题位置 | layout | string | 设置标题在表单组件的展示位置,表单场景下默认会跟随表单容器的标题的位置配置 |
标题宽度 | labelWidth | string | 表单场景下默认会跟随表单容器的标题宽度配置 |
标题提示 | labelTips | string | 配置标题的工具提示内容 |
下方提示 | extra | string | 配置后提示内容常显在输入框下方 |
移动端显示下划线 | borderedH5 | boolean | 关闭后移动端不显示底部下划线 默认值:true |
状态 | status | string | 示例:"edit" |
必填 | required | boolean | |
必填标识 | requiredFlag | boolean | 启用后,组件若要求必填,则会显示必填星号标记 默认值:true |
必填校验提示 | requiredMsg | string | 示例:"该项为必填项" |
绑定字段 | name | string | 表单字段的Key值,用于提交数据时,匹配数据模型字段标识。表单内需保证唯一。 示例:"formTextarea" |
标题内容 | label | string | 示例:"富文本" |
值存储方式 | storageType | string | 指定图片存储方式 默认值:"cloudID" |
输入值 | value | string | 示例:"" |
Events
组件暴露的事件,可以监听组件的事件来触发一些外部的动作
事件名 | 事件code | 事件出参 event.detail | 适用情况 | 说明 |
---|
值改变 | change | object
| 兼容三端 | 用户修改组件值时触发 |
Property API
通过属性 API,可以获取组件内部的状态和属性值,可以通过$w.componentId.propertyName
来访问组件内部的值,如 $w.input1.value
,详请请参考 属性 API
只读属性名 | 属性标识 | 类型 | 说明 |
---|
绑定字段 | name | string | 表单字段的Key值,用于提交数据时,匹配数据模型字段标识。表单内需保证唯一。 |
标题内容 | label | string | |
输入值 | value | string | |
必填 | required | boolean | |
是否展示 | visible | boolean | 组件是否展示 |
是否禁用 | disabled | boolean | 组件是否禁用 |
是否只读 | readOnly | boolean | 组件是否只读 |
Method API
通过方法 API,可以通过程序触发组件内部的方法,比如提交表单,显示弹窗等, 可以通过$w.componentId.methodName
来调用组件方法,如 $w.form1.submit()
方法名 | 方法标识 | 参数 | 方法说明 |
---|
设置值 | setValue | string 值 | 通过 $w.id1.setValue("weda") 设置组件值 |
设置显隐 | setVisible | boolean 显示 | 通过 $w.id1.setVisible(false) 设置组件为隐藏 |
设置禁用 | setDisabled | boolean 禁用 | 通过 $w.id1.setDisabled(true) 设置组件为禁用 |
清空值 | clearValue | 通过 $w.id1.clearValue() 清空组件值 | |
设置只读 | setReadOnly | boolean 只读 | 通过 $w.id1.setReadOnly(true) 设置组件为只读 |
触发校验 | handleValidate | 通过 $w.id1.handleValidate() 校验组件值 | |
清除校验 | clearValidate | 通过 $w.id1.clearValidate() 清除组件校验 |
Style API
通过样式 API,可以覆盖组件中内部元素的样式来实现自定义,例如在低代码编辑器中中通过 #wd-page-root .wd-btn
即可为所有的按钮组件编写样式,通过 :scope
可以控制单个组件样式, 详细说明请参考样式 API
名称 | 类名 | 说明和示例 |
---|
根元素 | .wd-rich-text-root | 组件最外层元素
|
H5 端根元素 | .wd-h5-rich-text-root | 可设定 H5 端的根元素样式
|
PC 端根元素 | .wd-pc-rich-text-root | 可设定 PC 端的根元素样式
|
小程序端根元素 | .wd-mp-rich-text-root | 可设定小程序端的根元素样式
|
组件标题样式 | .wd-rich-text-root .wd-form-item-wrap__label | 组件标题元素
|
表单控件根节点样式 | .wd-rich-text-root .wd-form-item-wrap__control | 设置表单控件根元素样式
|
编辑态-输入框样式 | .wd-rich-text-root .ExEditor-basic | 组件边框、边距样式
|
编辑态-输入框样式(获取焦点) | .wd-rich-text-root .ExEditor-basic.ProseMirror-focused | 编辑态-输入框样式(获取焦点)
|
编辑态-占位文字样式(PC/H5 端) | .wd-rich-text-root .exeditor-placeholder-container | 设置占位文字样式
|
禁用态-输入框样式 | .wd-rich-text-root .is-disabled .ExEditor-basic | 禁用态-输入框样式
|
只读态-表单值样式 | .wd-rich-text-root .is-readonly .ExEditor-basic | 只状态-表单值样式
|
编辑态-校验信息 | .wd-rich-text-root .wd-g-text-error | 设置组件校验信息样式
|
提示文字 | .wd-rich-text-root .wd-form-item__help-text | 设置组件提示文字样式
|
Version Changes
- Property changes
- Style changes
- widget api changes
Frequently Asked Questions
Why are images uploaded in rich text displaying abnormally?
To ensure the security of your resources, the rich text image upload plugin implements anti-leech protection. Images uploaded to cloud storage use the cloud protocol, preventing users from obtaining permanent addresses.
The rich text editing component and rich text display component internally convert private images using the cloud protocol by transforming private cloud://xxxx protocol addresses into standard http protocol addresses, and then display the images using the generated temporary access links.
Therefore, if the rich text contains images obtained through its built-in upload plugin:
- Copy the final displayed html code (the image validity period may have expired)
- Directly use the raw html code from the database (images remain in the original cloud protocol)
- When exporting via a template for installation, the html template data of rich text (including cloud protocol links) is exported, but the actual file data corresponding to the links is not exported simultaneously, resulting in the corresponding files being unavailable when images are displayed.
- or other operations that bypass hotlink protection logic, etc.
may cause images to display abnormally.
Users can also flexibly convert and use images with cloud protocol stored in the database. For implementation details, refer to Obtain temporary access links for cloud storage files.
Why are externally linked images displaying abnormally?
Many websites' images check the page source, possibly because anti-leech protection is enabled. When accessed directly, there is no referrer, but when used in your page, it verifies the page source to block access. You can try using other image resources or check the loading failure information in the F12 developer tools.
How to customize the display of rich text content with images
The image addresses stored by rich text uploads use the cloud protocol. The rich text display component internally performs the following conversion to automatically achieve image display. If custom handling of image display is required, refer to the following implementation methods.
- Define the transformValue method to match rich text image content via regular expressions and convert the image URLs.
export default function () {
// Regular expression for matching img
const regex = new RegExp(/<img [^>]*src=\\*"([^"]*?)\\*"/g);
const transformImg = (value) => {
return (value || '')
.toString()
.replace(/<img style="/g, `<img style="max-width:100%;`)
.replace(/<img /g, `<img `);
};
/**
* By invoking [$w.cloud.getTempFileURL](https://docs.cloudbase.net/lowcode/api/cloud#wcloudgettempfileurl) to obtain temporary access links for cloud storage files, converting private cloud://xxxx protocol addresses to standard http protocol addresses.
* Note: If the cloud://xxx protocol address is incorrect or lacks access permissions, this method will not return an address. Do not arbitrarily modify the default permissions of cloud storage.
*/
const getSrc = async (img) => {
const url = img.replace(regex, '$1');
if (img.includes('cloud://')) {
return await $w.cloud.getTempFileURL(url);
}
};
// Match img tags with cloud protocol image addresses using regex
const imgs = $w.richText1.value.match(regex);
let tempValue = transformImg($w.richText1.value);
if (imgs && imgs.length > 0) {
(async () => {
// Iterate through the image array to obtain http protocol addresses
const imgRes = await Promise.all(
imgs.map(async (img) => {
return await getSrc(img);
})
);
// Set the obtained http address to the image's src for display
imgs.forEach((img, index) => {
const url = img.replace(regex, '$1');
if (imgRes[index]) {
tempValue = tempValue.replace(new RegExp(url, 'g'), imgRes[index]);
}
});
$w.page.dataset.state.var1 = tempValue;
})();
}
}
- Call the transformValue event to obtain the converted rich text value