sidebarDepth: 3

API

获取API$f

  • 全局方法

    1. $f = formCreate.create(rules)
    2. $f = vm.$formCreate(rules)
  • 组件模式

    1. <form-create v-model="fApi"></form-create>
    1. new Vue({
    2. data(){
    3. return {
    4. fApi:{} //fApi 等同于 $f
    5. }
    6. }
    7. })

属性

表单的生成规则

  • 类型: array

  • 用法

  1. $f.rule

表单的全局配置

  • 类型: object

  • 用法

  1. $f.config

字段操作

获取表单所有字段名

  • 返回值: string[]

  • 用法

    1. const fields = $f.fields();

获取表单的键值对

  • 返回值: object

  • 用法

    1. const formData = $f.formData()

获取指定字段的值

  • 参数{string} field

  • 用法

    1. const value = $f.getValue(field)

    获取 field 组件的值

设置字段的值

  • 设置指定字段的值

    • 参数

      • {string} field
      • {any} value
    • 用法

      1. $f.setValue(field,value)

      修改field组件的值为value

  • 批量设置

    • 参数

      • {object} formData
    • 用法

      1. $f.setValue({
      2. field1:value1,
      3. field2:value2,
      4. field3:value3
      5. });

      修改field1,field2,field3组件的值分别为value1,value2,value3

    别名方法changeValue,changeField

删除指定字段

  • 参数{string} [field|name]

  • 返回值{object} rule

  • 用法

    1. $f.removeField(field)

    删除field字段

获取双向数据绑定的表单键值对

  • 返回值{object}

  • 用法

    1. const formData = $f.bind()

组件操作

更新组件规则

  • 参数

    • {string} [field|name]
    • {object} rule
    • {bool} cover 默认为深拷贝,等于 true 时为直接覆盖
  • 返回值{object} rule

  • 用法

    1. $f.updateRule(field,{
    2. props:{
    3. disabled: true
    4. }
    5. })
  • 例子🌰:

    CodeSandbox

  • 例子🌰(@vue/componsition-api版本)

    CodeSandbox

批量更新组件规则

  • 参数

    • {object} rules
    • {bool} cover 默认为深拷贝,等于 true 时为直接覆盖
  • 用法

    1. $f.updateRules({
    2. field1:{
    3. props:{
    4. disabled: true
    5. }
    6. },
    7. field2:{
    8. props:{
    9. disabled: false
    10. }
    11. }
    12. })

获取指定组件生成规则

  • 参数{string} [field|name]

  • 返回值{object}

  • 用法

    1. const rule = $f.getRule(field)

获取表单组件的生成规则

  • 返回值{object}

  • 用法

    1. const model = $f.model()

    获取表单组件的生成规则,组件定义field属性才可以获取到

获取自定义组件生成规则

  • 返回值{object}

  • 用法

    1. const component = $f.component()

    获取自定义组件生成规则,组件定义name属性才可以获取到

调用生成组件的方法

  • 参数

    • {string} field/name
    • {string} methodName 组件方法名称
  • 返回值Function

  • 用法

    1. const val = $f.method('input','focus')();

手动触发组件的事件

  • 参数

    • {string} field/name
    • {string} eventName 组件方法名称
    • ... args 事件参数
  • 用法

    1. $f.trigger('input','on-change','new value');

获取组件的vm/dom元素

  • 参数

    • {string} field/name
  • 返回值Vue|Element

  • 用法

    1. $f.el(field);

表单操作

表单验证

  • 参数{function} callback

  • 用法

    1. $f.validate((valid)=>{
    2. if(valid){
    3. //TODO 验证通过
    4. }else{
    5. //TODO 验证未通过
    6. }
    7. })

验证指定字段

  • 参数

    • {string} field
    • {function} callback
  • 用法

    1. $f.validateField(field,(errMsg)=>{
    2. if(errMsg){
    3. //TODO 验证未通过
    4. }else{
    5. //TODO 验证通过
    6. }
    7. });

插入组件

  • 参数

    • {object} rule
    • {stirng} [field|name]
    • {boolean} isChild 是否添加到 [field|name] 组件的子级
  • 用法

    1. $f.prepend({
    2. type:"input",
    3. title:"商品简介",
    4. field:"goods_info",
    5. value:"",
    6. props: {
    7. "type": "text",
    8. "placeholder": "请输入商品简介",
    9. },
    10. validate:[
    11. { required: true, message: '请输入商品简介', trigger: 'blur' },
    12. ],
    13. }, 'goods-name', false);

    field的字段之前插入指定表单元素,不传入field默认在第一个.如果isChildtrue,将会添加到field的子级

追加组件

  • 参数

    • {object} rule
    • {stirng} [field|name]
    • {bool} isChild 是否添加到 [field|name] 组件的子级
  • 用法

    1. $f.append({
    2. type:"input",
    3. title:"商品简介",
    4. field:"goods_info",
    5. value:"",
    6. props: {
    7. "type": "text",
    8. "placeholder": "请输入商品简介",
    9. },
    10. validate:[
    11. { required: true, message: '请输入商品简介', trigger: 'blur' },
    12. ],
    13. }, 'goods-name', false);

    field的字段之后插入指定表单元素,不传入field默认在最后一个.如果isChildtrue,将会添加到field的子级

手动提交表单

  • 参数

    • {function} onSubmit
    • {function} fail
  • 用法

    1. $f.submit((formData,api)=>{
    2. //提交表单
    3. },(api)=>{
    4. //验证未通过
    5. })

    手动提交表单,如果传入onSubmit参数,就不会再触发option.onSubmit

隐藏或显示指定组件

  • 参数

    • {bool} hidden
    • {string|array} [field|name]
  • 用法

    1. $f.hidden(true)
    1. $f.hidden(true,field)
    1. $f.hidden(true, [field1,field2,field3,name1,name2])

获取组件显示状态

  • 参数{string} [field|name]

  • 返回值{bool}

  • 用法

    1. const hiddenStatus = $f.hiddenStatus();

禁用或取消指定组件

  • 参数

    • {bool} disabled
    • {string|array} field
  • 用法

    1. $f.disabled(true)
    1. $f.disabled(true, field)
    1. $f.disabled(true, [field1,field2,field3])

清除组件的验证信息

  • 参数{string|array} field

  • 用法

    1. $f.clearValidateState();
    1. $f.clearValidateState(field);
    1. $f.clearValidateState([field1,field2]);

获取表单中的值是否发生变化状态

  • 返回值{bool}

  • 用法

    1. const status = $f.changeStatus()

清除表单的值是否发生变化状态

  • 用法

    1. $f.clearChangeStatus()

修改表单提交按钮规则

  • 参数{object} props

  • 用法

    1. $f.submitBtnProps({loading:true})
  • 快捷操作:

    • $f.btn.loading(loading = true) 设置提交按钮进入loading状态
    • $f.btn.disabled(disabled = true) 设置提交按钮禁用状态
    • $f.btn.show(isShow = true) 设置提交按钮显示状态

修改表单重置按钮规则

  • 参数{object} props

  • 用法

    1. $f.resetBtnProps({disabled:true})
  • 快捷操作:

    • $f.resetBtn.loading(loading = true) 设置重置按钮进入loading状态
    • $f.resetBtn.disabled(disabled = true) 设置重置按钮禁用状态
    • $f.resetBtn.show(isShow = true) 设置重置按钮显示状态

关闭frame组件的弹出框

  • 参数{string} [field|name]

  • 用法

    1. $f.closeModal(field)

更新全局配置

  • 参数{object} options

  • 用法

    1. $f.updateOptions({
    2. onSubmit:(formData)=>{
    3. //提交表单
    4. }
    5. })
  • 例子🌰

    CodeSandbox

修改表单提交的回调

  • 参数{Function} [onSubmit]

  • 用法

    1. $f.onSubmit((formData)=>{
    2. //提交表单
    3. })

控制表单整体显示状态

  • 参数{bool} isShow

  • 用法

    1. $f.hideForm(true)

将生成规则转换为 json

  • 返回值{string}

  • 用法

    1. const json = $f.toJson();

手动重新渲染指定组件

  • 参数{string} [field/name]

  • 用法

    1. $f.sync(field)

重载表单

  • 参数{Array} [rules]

  • 用法

    1. $f.reload(newRule)

    按照新的生成规则重载表单生成器,如果不传入rules会按照当前规则重载

重新渲染表单

  • 参数{bool} [clear]

  • 用法

    1. $f.refresh(true)

    重新渲染表单,cleartrue时会清空所有组件的缓存

重置表单

  • 用法

    1. $f.resetFields()

销毁表单

  • 用法

    1. $f.destroy()

监听表单事件

  • 参数

    • {string} emitName 生成规则emit事件名称
    • {Function} callback 回调方法
  • 用法

    1. /*
    2. rule:{
    3. field:'goods-name'
    4. //...
    5. emit:['on-change']
    6. }
    7. */
    8. $f.on('goods-name-on-change',() => {
    9. //TODO
    10. });

监听表单事件,只触发一次

  • 参数

    • {string} emitName 生成规则emit事件名称
    • {Function} callback 回调方法
  • 用法

    1. /*
    2. rule:{
    3. field:'goods-name'
    4. //...
    5. emit:['on-change']
    6. }
    7. */
    8. $f.once('goods-name-on-change',() => {
    9. //TODO
    10. });

    监听一个自定义事件,但是只触发一次,在第一次触发之后移除监听器

移除表单事件监听器

  • 参数

    • {string | Array} emitName 生成规则emit事件名称
    • {Function} [callback] 回调方法
  • 用法

    移除自定义事件监听器。

    • 如果没有提供参数,则移除所有的事件监听器;

    • 如果只提供了事件,则移除该事件所有的监听器;

    • 如果同时提供了事件与回调,则只移除这个回调的监听器。

    1. $f.off('goods-name-on-change');
    2. // $f.off('goods-name-on-change', fn);

$f.set

  • 参数

    • {object} node
    • {string} key
    • {any} value
  • 用法

    1. $f.set(field.rule.col,'span',12)

    如果修改组件的规则后页面没有更新时可以尝试使用该方法,该方法与Vue.$set相同