自定义组件

form-create 支持的在表单内部生成任何 vue 组件

::: tip 提醒

  • 自定义组件必须在生成之前挂载或注册
  • 只有当你需要通过$f.component()方法获取该组件的生成规则时,需要定义name属性
  • 当你需要让自定义组件和内置组件具有一样的功能时,可以将其转换为表单组件

:::

通过标签生成组件

通过建立一个虚拟 DOM的方式生成自定义组件

JSON 生成

  1. {
  2. type:'i-button',
  3. name: 'btn',
  4. props:{
  5. type:'primary',
  6. field:'btn',
  7. loading:true
  8. },
  9. children:['加载中']
  10. }

Maker 生成

maker.create

  • 参数

    • {string} tab 组件名/标签名
    • {string} field
    • {string} title
  • 用法

    1. formCreate.maker.create('i-button','btn','自定义按钮')

生成

  1. formCreate.maker.create('i-button').props({
  2. type:'primary',
  3. field:'btn',
  4. loading:true
  5. }).children(['加载中']).name('btn');

修改

通过$f.component()方法获取组件的生成规则并修改

  1. $f.component().btn.props.loading = false;

示例

create-demo

  1. let rule = [
  2. {
  3. type:'row',
  4. children:[
  5. {
  6. type:'i-col',
  7. props:{
  8. span:12
  9. },
  10. children:[
  11. formCreate.maker.input('商品名称','goods_name','iphone'),
  12. formCreate.maker.number('商品价格','goods_price',8688)
  13. ]
  14. },
  15. {
  16. type:'i-col',
  17. props:{
  18. span:12
  19. },
  20. children:[
  21. formCreate.maker.dateTime('创建时间','create_at'),
  22. formCreate.maker.radio('是否显示','is_show').options([
  23. {value:1,label:'显示'},
  24. {value:0,label:'不显示'}
  25. ])
  26. ]
  27. }
  28. ]
  29. }
  30. ]

通过模板生成组件

通过模板的方式生成自定义组件

JSON 生成

  1. {
  2. type:'template',
  3. name:'btn'
  4. template:'<i-button :loading="loading">{{text}}<i-button>',
  5. vm: new Vue({
  6. data:{
  7. loading:true,
  8. text:'正在加载中'
  9. }
  10. })
  11. }

Maker 生成

  • 参数

    • {string} template
    • {Vue} vm
    • {string} field = undefined
    • {string} title = undefined
  • 用法

    1. formCreate.maker.template('<i-button></i-button>',new Vue,'btn','自定义按钮')

maker.template

  1. formCreate.maker.template('<i-button :loading="loading">{{text}}</i-button>',new Vue({
  2. data:{
  3. loading:true,
  4. text:'正在加载中...'
  5. }
  6. })).name('btn')

修改

可以通过一下两种方式动态修改vm组件内部的值

通过rule获取自定义组件的vm并修改

  1. rule.vm.text = '加载完毕';
  2. rule.vm.loading = false;

通过$f.component()方法获取自定义组件的vm并修改

  1. $f.component().btn.vm.text = '加载完毕';
  2. $f.component().btn.vm.loading = false;

如果修改后组件没有更新,请通过$.sync$f.refresh方法强制刷新