1、概述

组件开发主要是由几4大模块构成,每个模块负责不同的分工,相互搭配构建成一个完整的可编辑组件。

1、default-setting模块

2、template模块

3、setting模块

4、main模块

2、模块介绍

1、default-setting模块

组件的默认设置,包含组件的基础设置,元素设置,内置页设置等组件基础信息。

1、元素配置

元素配置是组件构建的核心配置,所有的组件都依赖元素配置生成对应编辑器,渲染引擎的组件。

元素的配置分为元素的公用配置信息,私有元素配置

1、元素配置列表

元素名称ComponentElementModel 元素公用设置BaseCmp<T> 私有元素配置










属性

说明

类型

name

元素名称,可供编辑器显示用

string

key

可编辑元素的英文标识,可用于代码编程

string

type

可编辑元素类型包括 'btn' | 'text' | 'image' | 'choose' | 'input' | 'textarea' | 'submit' | 'fileUploader' | 'select' | 'dialog' | 'shape' | 'wxportrait' | 'wxnickname'

string

style

元素的样式

Object | undefined

isDisableControllable

是否可控制显示或隐藏

boolean | undefined

parentName

元素所属的组件名或内置页名

string | string[] | undefined

isScale

是否可以缩放大小

boolean | undefined

isDisableClick

是否有点击事件

boolean | undefined

isDisableDraggable

是否可拖拽

boolean | undefined

isDisableRotable

是否可旋转

boolean | undefined

isDisableImageReplaceable

图片是否可替换,一些占位图是不能替换的

boolean | undefined

isDisableTextReplaceable

文本是否可替换do

boolean | undefined

isDisableAnimation

是否禁用动画

boolean | undefined

isDisableTextBtn

是否禁用文字按钮,即仅图片按钮(仅对按钮元素有效)

boolean | undefined

isDisableFontSetting

是否禁用字体设置(有些动态来源的文本内容,如微信昵称,无法切割字体,需要禁用掉组件面板上的字体设置)

boolean | undefined

anchorsType

编辑状态锚点的类型:为空则表示没有锚点,不能改变大小

'nw n ne e se s sw w' 代表组件编辑框的8个锚点

string | undefined

hiddenWhenNoNickname

当获取不到微信昵称时,是否隐藏默认文字(仅对微信昵称元素有效)

boolean | undefined


default-setting 配置示例


default-setting配置
//包含一个按钮 和 一个内置页的组件
const defaultSetting = {
  name: "testCmp",
  title: "测试组件",
  inlinePages:[
    {
      name: "INLINE_PAGE_A",
      title: "这是内置页",
      style: {},
      cover:
        "https://static.h5no1.com/rp/plugin/assets/a19e096f-89b8-4f15-8187-09db7a3c86f0",
    }
  ],
  elements:[
     {
      key: "BTN_A",
      name: "按钮",
      type: "btn",
      label: "确定",
      style: {
        position: "absolute",
        left: 42,
        top: 353,
        width: 235,
        height: 39,
        backgroundColor: "rgba(224,47,36,1)",
        borderRadius: 20,
        fontSize: 15,
        fontWeight: 600,
        color: "rgba(255,255,255,1)",
      },
      parentName: "testCmp",
    },
  ],
  cover:"https://static.h5no1.com/rp/plugin/assets/85becc30-ccb4-41b2-ad75-9bfa9447e587",
  style: {
    width: 293,
    height: 408,
    backgroundColor: "#fff",
  },
  hasComponentSetting: true,
};


1、ComponentDefaultSetting  默认设置

属性

说明

类型

name

组件英文名,唯一

string

title

组件中文描述

string

cover

组件封面图

string

style

组件自身的样式

Object | undefined

inlinePages

组件内置页列表

ComponentInlinePage[]

elements

组件内部可编辑元素列表,能够被编辑器识别的原子组件

ComponentElementModel[]

hasComponentSetting

组件是否有需要在编辑器右侧设置面板中加载的 setting 配置

boolean | undefined

componentBgVisible

组件是否支持隐藏背景,当为false时才隐藏背景,undefined不隐藏

boolean | undefined

isDisableClientRect

是否可以设置宽高(编辑器会禁止自适应宽高)

boolean | undefined


3、BaseCmp 可编辑元素设置


4、ComponentInlinePage 内置页设置

元素

说明

类型

name

内置页英文名

string

title

内置页标题

string

cover

内置页封面图

string

style

内置页样式

Object | undefined

anchorsType

编辑状态锚点的类型:为空则表示没有锚点,不能改变大小

'nw n ne e se s sw w' 代表组件编辑框的8个锚点

string | undefined

height

内置页高度

number | undefined

1、上下文

概述:

染模块中会有对应的render方法将组件逻辑渲染出来,最终注册到编辑器、渲染引擎使用。但组件的构建需要依赖default-setting、用户信息等数据支持,所以在构建组件之前需要创建一个上下文,提供此类数据给组件使用。

1、DependencyContext 上下文

上下文创建说明
DependencyContextReact.createContext组件配置上下文

注意:

DependencyContext只能提供给template、setting模块相关组件使用(main模块为PReact构建,所以无法正常调用)。


template模块中,还需要对可编辑组件,和可编辑元素进行对应的上下文注入。


2、withDependencyContext  高阶组件

main模块使用withDependencyContext方法进行上下文关联

3、示例

1、上下文的注入可查看各个模块创建详细示例,

点击查看template模块创建

点击查看setting模块创建

点击查看main模块创建

2、组件中上下文的获取可查看各个模块组件创建详细示例

点击查看template组件创建

点击查看setting组件创建

点击查看main组件创建

2、main模块

main模块负责组件H5端的渲染。

1、CompoentMainModule基础类

提供模块加载渲染的基础方法。

属性说明
config组件配置信息
方法说明
static getVisible静态方法,返回此组件是否可见
parseConfig 解析基础配置
render组件渲染

destroy

组件销毁


2、MainModule模块类

main模块类的创建需继承CompoentMainModule,并提供render方法进行渲染。

3、registryComponentMain方法

将模块注册到渲染引擎,提供调用。

4、withDependencyContext 

使用此方法关联模块上下文,使模块中组件能够获取到上下文环境(上下文)。

5、代码示例:


main 模块
import {
  ComponentMainModule,
  registryComponentMain,
} from "@fe-plugin/common/lib/component-main";
// main模块创建
class MainModule extends CompoentMainModule {
  //返回值可控制组件是否可见(不提供此方法组件默认显示)
  static async getVisible(config) {
    return true;
  }

  //解析配置(不提供此方法配置解析为初始化设置)
  parseConfig(data) {
    const config = super.parseConfig(data);
    //在此可对默认配置进行额外操作
    return config;
  }

  // 渲染组件
  render() {
    super.render();
    //直接使用config配置
    console.log(this.config);
    //进行渲染
  }
}

//将渲染的组件登录到编辑器
export default registryComponentMain("组件名称", MainModule);

3、template模块

template模块负责组件在编辑器舞台中的渲染。

1、ComponentTemplateModule基础类

提供模块加载渲染的基础方法。

属性说明
config组件配置信息
方法说明
parseConfig 解析基础配置
render组件渲染调用

update

组件更新调用

updateElement

元素更新调用

destroy

组件销毁调用

2、TemplateModule模块类

类的创建的需继承ComponentTemplateModule,并提供render方法进行渲染。

注意:TemplateModule模块类中必须提供 getDefaultSetting 静态方法,否则编辑器无法获取配置(详看示例)。

3、registryComponentTemplate方法

将模块注册到编辑器,提供调用。

4、DependencyContext上下文

关联模块上下文,使模块中组件能够获取到上下文环境(点击跳转上下文介绍)。

5、组件的上下文注入

使用DependencyContext可编辑组件和可编辑元素进行对应的上下文注入。

main 模块
import {
  ComponentTemplateModule,
  registryComponentTemplate,
} from "@fe-plugin/common/lib/component-template";
import { createModel } from "@fe-plugin/components/lib/templates/models";
import defaultSetting from "app/default-setting";


//创建模块
class TemplateModule extends ComponentTemplateModule {
  // 获取配置(必须提供此静态方法,否则编辑器无法获取到配置)
  // 编辑器在加载组件的时候会调用此方法
  static getDefaultSetting() {
    const data = {
      ...defaultSetting,
      elements: [],
    };
    defaultSetting.elements.forEach((el) => {
      const model = createModel(el.type, el);
      data.elements.push(model);
    });
    return data;
  }

  //解析配置(不提供此方法则返回默认配置)
  parseConfig(data) {
    const config = super.parseConfig(data);
    //在此可对默认配置进行额外操作
    return config;
  }

  // 创建渲染 入口
  render() {
    super.render();
    // 使用config
    console.log(this.config);
    //进行渲染
  }
}

export default registryComponentTemplate("组件名称", TemplateModule);


3、setting模块

template模块负责组件在编辑器舞台中的渲染。

1、ComponentSettingModule基础类

提供模块加载渲染的基础方法。

属性说明
config组件配置信息

formValue

表单数据

formPass

是否通过校验

方法说明
parseConfig 解析基础配置

initializeStore

初始化 store ,给该组件提供数据源

render玩法配置渲染,编辑器中央区域玩法配置(暂时不开放)

renderCmp

组件配置渲染,编辑器右侧组件配置

validate

校验方法

destroy

组件销毁

2、SettingModule模块类

类的创建的需继承ComponentSettingModule,并提供renderCmp方法进行渲染。

3、registryComponentSetting方法

将模块注册到编辑器,提供调用。

4、DependencyContext上下文

关联模块上下文,使模块中组件能够获取到上下文环境(点击跳转上下文介绍)。

main 模块
import {
  ComponentSettingModule,
  registryComponentSetting,
} from "@fe-plugin/common/lib/component-setting";

//setting模块创建
class SettingModule extends ComponentSettingModule {
  //解析配置(不提供此方法则返回默认配置)
  parseConfig(data) {
    const config = super.parseConfig(data);
    //在此可对默认配置进行额外操作
    return config;
  }

  // 渲染编辑器右侧组件设置面板
  renderCmp(container, componentInfo, onChange) {
    super.renderCmp(container, componentInfo, onChange);
    //进行渲染
  }

  // 校验设置是否通过(不提供此方法默认校验通过)
  validate() {
    this.setShowValidErr();
    if (!this.formPass) return false;
    const componentInfo = getComponentInfo(this.config);
    // 同步组件setting里的配置,在编辑器中再次打开设置弹窗的时候,可以直接回显
    this.config.set("componentInfo.props", this.formValue);
    return { ...componentInfo, props: this.formValue };
  }
}

//进行设置 注册
export default registryComponentSetting("组件名称", SettingModule);



  • 无标签