使用form-create监听组件的事件

FormCreate 是一个可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的表单生成组件。支持5个UI框架,并且支持生成任何 Vue 组件。内置20种常用表单组件和自定义组件,再复杂的表单都可以轻松搞定

FormCreate官网:https://www.form-create.com

帮助文档:https://form-create.com/v3/


通过配置项`on`,`emit`可以监听组件内抛出的事件

1. 通过配置项`on`监听事件

<template>
  <div>
    {{ text }}
    <form-create :rule="rule" v-model:api="fApi" :option="options"/>
  </div>
</template>

<script>
export default {
  data() {
    return {
      fApi: {},
      text: '没有变化',
      options: {
        onSubmit: (formData) => {
          alert(JSON.stringify(formData))
        }
      },
      rule: [
        {
          type: 'input',
          field: 'event',
          title: 'change 事件',
          on: {
            change: (val) => {
              this.text = '变化了:"' + val.target.value + '"';
            }
          }
        }
      ]
    }

  }
}
</script>
2. 通过配置项`emit`监听事件
通过`emit`方式监听事件时,事件名称中的大写会自动转换成`-`+小写
例如`inputField`组件的 `change`事件,事件名称为`input-field-change`
<template>
  <form-create v-model:api="fApi" :rule="rule" :option="options" @input-field-change="change"
               @input-field2-blur="blur"/>
</template>

<script>
export default {
  data() {
    return {
      fApi: {},
      options: {
        onSubmit: (formData) => {
          alert(JSON.stringify(formData))
        }
      },
      rule: [
        {
          type: 'input',
          field: 'inputField',
          title: 'change 事件',
          emit: ['change']
        },
        {
          type: 'input',
          field: 'inputField2',
          title: 'blur 事件',
          emit: ['blur']
        }
      ]
    }

  },
  methods: {
    change() {
      alert(`change: "${this.fApi.getValue('inputField')}"`)
    },
    blur() {
      alert('blur!')
    }
  }
}
</script>


3. 通过配置项`emitPrefix`自定义事件前缀

事件名称为`${emitPrefix}-${eventName}`
<template>
  <form-create :rule="rule" v-model:api="fApi" :option="options" @prefix1-change="change" @prefix2-blur="blur"/>
</template>

<script>
export default {
  data() {
    return {
      fApi: {},
      options: {
        onSubmit: (formData) => {
          alert(JSON.stringify(formData))
        }
      },
      rule: [
        {
          type: 'input',
          field: 'inputField',
          title: 'change 事件',
          emit: ['change', 'blur'],
          emitPrefix: 'prefix1'
        },
        {
          type: 'input',
          field: 'inputField2',
          title: 'blur 事件',
          emit: ['blur'],
          emitPrefix: 'prefix2'
        }
      ]
    }

  },
  methods: {
    change() {
      alert(`change: "${this.fApi.getValue('inputField')}"`)
    },
    blur() {
      alert('blur!')
    }
  }
}
</script>

 

4. 通过`Api.on`方法监听事件

<template>
  <form-create :rule="rule" v-model:api="fApi" :option="options"/>
</template>

<script>
export default {
  data() {
    return {
      fApi: {},
      options: {
        onSubmit: (formData) => {
          alert(JSON.stringify(formData))
        }
      },
      rule: [
        {
          type: 'input',
          field: 'inputField',
          title: 'change 事件',
          emit: ['change', 'blur'],
          emitPrefix: 'prefix1'
        },
        {
          type: 'input',
          field: 'inputField2',
          title: 'blur 事件',
          emit: ['blur'],
        }
      ]
    }

  },
  methods: {
    change() {
      alert(`change: "${this.fApi.getValue('inputField')}"`)
    },
    blur() {
      alert('blur!')
    }
  },
  mounted() {
    this.fApi.on('prefix1-change', this.change)
    this.fApi.on('input-field2-blur', this.blur)
  }
}
</script>

 

posted @ 2024-06-03 11:13  xaboy  阅读(57)  评论(0编辑  收藏  举报