@@ -178,15 +178,25 @@ uiSchema = {
178178:::
179179
180180## 自定义Widget
181- 自定义Widget通过配置 ` ui:widget ` 字段,不支持直接配置在 ` type: object ` 中
182-
183- > ` 0.3 ` 以上版本支持在 ` type: array ` 中直接配置 ` ui:widget ` ,如:[ 配置多文件上传] ( https://form.lljj.me/#/demo?type=Upload )
181+ 自定义Widget通过配置 ` ui:widget ` 字段
182+
183+ ::: tip 快速理解
184+ * 简单理解:Widget组件就是你的输入组件的最小单元,比如 ` input ` ` checkbox ` ,并且不和当前form数据耦合,所以组件内不会访问到任何表单的数据,当然你可以通过ui: xx 传递进去
185+ * 使用方法:只需要是一个合法的vue可渲染的组件配置即可
186+ * props: ` value ` / ` modelValue `
187+ * 如何更新值:使用v-model,只需要组件内部实现v-model即可,vue2 prop ` value ` , vue3 prop ` modelValue `
188+ * 其它备注: ` ui:xxx ` 中的配置也都会和内置组件一样,传递给自定义widget组件
189+ * 参见文档:[ vue2 v-model] ( https://cn.vuejs.org/v2/guide/components-custom-events.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%84%E4%BB%B6%E7%9A%84-v-model )
190+ [ vue3 v-model] ( https://v3.cn.vuejs.org/guide/migration/v-model.html )
191+ :::
184192
185193* 类型:` String ` | ` Object ` | ` Function ` (参见 [ $createElement] ( https://cn.vuejs.org/v2/guide/render-function.html#createElement-%E5%8F%82%E6%95%B0 ) 第一个参数)
186194* 使用场景:需要自定义输入组件,比如结合业务的` 图片上传 ` ` 商品选择 ` 等等
187195
188196::: warning
189197* 自定义的 ` Widget ` 组件必须接受一个双向绑定 ` v-model ` 的值
198+ * ` 0.3 ` 以上版本支持在 ` type: array ` 配置 ` ui:widget ` ,如:[ 配置多文件上传] ( https://form.lljj.me/#/demo?type=Upload )
199+ * 不支持直接配置在 ` type: object ` 中
190200:::
191201
192202:::demo async function 重置,在实际项目中,实际只需要 ` () => import('./xxx.vue') ` ;
@@ -263,20 +273,24 @@ uiSchema = {
263273## 自定义Field
264274自定义field通过配置 ` ui-schema ` ` ui:field ` 字段,可以配置在任意需要自定义field的schema节点,参数格式和 [ 自定义Widget] ( #自定义widget ) 一致
265275
266- 支持配置 [ ui: fieldProps ] ( /zh/guide/basic-config.html#ui-schema ) ,传给自定义field组件,需要在field组件props配置申明该参数
276+ ::: tip 快速理解
277+ * 简单理解:Field 组件就是Widget组件的父级,来决定Widget组件选择和数据校验
278+ * 使用方法:只需要是一个合法的vue可渲染的组件配置即可
279+ * props: 内部渲染所有的 props 都可获取,参见下文 ` Field组件props `
280+ * 如何更新值:需要 vueUtils.getPathVal 、vueUtils.setPathVal 来获取或者更新当前值,[ 可参见demo] ( https://github.com/lljj-x/vue-json-schema-form/blob/master/packages/docs/docs/.vuepress/injectVue/field/DistpickerField.vue )
281+ * 其它备注: [ ui: fieldProps ] ( /zh/guide/basic-config.html#ui-schema ) 可传递 prop fieldProps 到你自定义field组件,需要自己申请props
282+ * 其它参见后文中的demo
283+ :::
267284
268285* 类型:` String ` | ` Object ` | ` Function ` (参见 [ $createElement] ( https://cn.vuejs.org/v2/guide/render-function.html#createElement-%E5%8F%82%E6%95%B0 ) 第一个参数)
269286* 使用场景:schema配置无法满足,或者想嵌入现用的组件
270287
271- > 自定义Field 会直接接管后续节点的渲染,意味着自定义节点后渲染逻辑都可以根据使用者需要的场景自行处理,field组件内部一般会包含 ` FormItem ` ,` 校验规则 ` ,` 输入组件 `
272-
273288::: warning
274- 使用者需要自行将值同步回 ` formData `
275-
276- 可以直接修改 ` rootFormData ` 的属性值或者通过 ` vueUtils ` 提供的方法设置,可以参见后面自定义演示
289+ * vueUtils.getPathVal 、vueUtils.setPathVal 来获取或者更新当前值,[ 可参见demo] ( https://github.com/lljj-x/vue-json-schema-form/blob/master/packages/docs/docs/.vuepress/injectVue/field/DistpickerField.vue )
290+ * 自定义Field 会直接接管后续节点的渲染,意味着自定义节点后渲染逻辑都可以根据使用者需要的场景自行处理,field组件内部一般会包含 ` FormItem ` ,` 校验规则 ` ,` 输入组件 `
277291:::
278292
279- ` Field组件 ` 会接受以下 ` props ` :
293+ Field组件 ` props ` :
280294
281295:::demo showCode: Props(点击下拉展开)
282296 ``` js
0 commit comments