自定义表单组件

实现v-model的组件都可以称为表单组件

表单组件可以通过$f.formData,$f.getValue,$f.setValue,$f.disabled等方法修改组件状态

预定义

定义好以下属性和事件,就能达到和内置组件相同的效果.赶快试一试吧

props

在自定义组件内部通过props接收一下属性

  • value 组件的值
  • disabled 组件的禁用状态

例如:

  1. vm = Vue({
  2. props:{
  3. value:String,
  4. disabled:Boolean
  5. }
  6. })

input 事件

通过input事件更新组件内部的值

当组件值发生变化后,通过 input 事件更新值.例如:

  1. vm.$emit('input',newValue);

挂载自定义组件

要生成的自定义组件必须通过vue.component方法挂载到全局,或者通过formCreate.component方法挂载

例如:

  1. formCreate.component('TestComponent',component);

生成

表单组件必须定义field属性

JSON

  1. {
  2. type:'TestComponent',
  3. value:'test',
  4. field:'testField',
  5. title:'自定义组件'
  6. }

Maker

  1. formCreate.maker.create('TestComponent','testField','自定义组件').value('test')

现在这个自定义组件就可以跟内置组件一样的去操作了

示例

自定义计数器按钮组件,获取按钮点击数.该组件的功能和内置组件相同

::: demo

  1. <template>
  2. <form-create :rule="rule" v-model="fApi" :option="options"/>
  3. </template>
  4. <script>
  5. export default {
  6. data(){
  7. return {
  8. fApi:{},
  9. options:{
  10. onSubmit:(formData)=>{
  11. alert(JSON.stringify(formData));
  12. },
  13. resetBtn:true
  14. },
  15. rule:[
  16. this.$formCreate.maker.template('<el-button @click="onClick" long :disabled="disabled">计数器-{{num}}</el-button>', function(){
  17. return new Vue({
  18. data: function () {
  19. return {
  20. num: this.value,
  21. }
  22. },
  23. props:{
  24. //预定义
  25. disabled:Boolean,
  26. value:Number,
  27. },
  28. watch:{
  29. value(n){
  30. //同步 value 的值
  31. this.num = n;
  32. }
  33. },
  34. methods: {
  35. onClick: function () {
  36. this.num++;
  37. //更新组件内部的值
  38. this.$emit('input',this.num);
  39. },
  40. },
  41. });
  42. },'btn','自定义表单组件').value(10)
  43. ]
  44. }
  45. }
  46. }
  47. </script>