评论

小程序的表单的组件化封装及使用

表单一直是类web项目中开发的难点,表单涉及UI,交互,校验,接口,回填等各种坑点,设计表单模块时需要有一个统一的设计思想

表单一直是类web项目中开发的难点,表单涉及UI,交互,校验,接口,回填等各种坑点,在项目中,我们遵循下列原则设计表单组件

  • 配置化表单
  • 统一的表单结构
  • 丰富的API,简化出错,提示等操作
  • 支持任一表单元素之间的联动
  • 原生微信所有表单组件支持

示例代码

https://github.com/webkixi/aotoo-xquery 
=> pages/form    

表单组件配置说明

表单由配置文件生成,表单属性构成大致如下图

文本表单使用

以文本类表单展开说明
wxml

<ui-form wx:if="{{formConfig}}" dataSource="{{formConfig}}" /> 

js

const Pager = require('../../components/aotoo/core/index')
const config = [
  {
    title: '文本框表单区域',
    desc: '说明信息',
    input: [
      {
        id: 'aaa', type: 'text', title: '文本', placeholder: '数字输入键盘', 
        error: '错误信息',
        desc: '说明信息'
        bindblur: 'onbindblur',
        bindinput: 'onbindinput',
        bindfocus: 'onbindfocus',
        bindconfirm: 'onbindconfirm',
        bindkeyboardheightchange: 'onbindkeyboardheightchange',
      },
    ]
  },

  {
    title: '数字表单区域',
    input: [
      {id: 'ccc', type: 'number', title: '整数型', placeholder: '数字输入键盘', bindblur: 'onBlur'},
      {id: 'ddd', type: 'idcard', title: '身份证', placeholder: '身份证输入键盘', bindblur: 'onBlur'},
      {id: 'eee', type: 'password', title: '密码串', maxlength: 30, placeholder: '隐藏的密码串', bindblur: 'onBlur'}
    ]
  },

  {
    title: 'TEXTAREA',
    input: [
      {id: 'aaa', type: 'textarea', title: '文本域', placeholder: '输入文字', bindblur: 'onBlur'},
    ]
  },
]

const mthSet = {
  onbindblur(e) {
    console.log('=====text', e.detail.value);
  },
  onbindinput(e) {
    console.log('=====text', e);
  },
  onbindfocus(e) {
    console.log('=====text', e);
  },
  onbindconfirm(e) {
    console.log('=====text', e);
  },
  onbindkeyboardheightchange(e) {
    console.log('=====text', e);
  },
}

Pager({
  data: {
    formConfig: {
      $$id: 'myForm',
      formStyle: 'width: 90vw;',
      data: config,
      methods: mthSet
    },
  }
})

示例如下图所示

更多说明

请移步 https://juejin.im/post/5eba58aaf265da7b9d50d7dd

最后一次编辑于  2020-05-15  
点赞 0
收藏
评论

1 个评论

  • Youngwell
    Youngwell
    2020-06-24

    显示隐藏密码,你是动态设置input的type属性为password/text吗?

    2020-06-24
    赞同
    回复 4
    • 天天修改
      天天修改
      2020-06-24
      是的
      2020-06-24
      回复
    • Youngwell
      Youngwell
      2020-06-24回复天天修改
      测过没问题吗?
      悄悄告诉你:小程序的input的type属性没有password值,正确用法如下,动态改变password为true/false。
      2020-06-24
      回复
    • 天天修改
      天天修改
      2020-06-24回复Youngwell
      这个有设置的
      2020-06-24
      回复
    • 天天修改
      天天修改
      2020-06-24回复Youngwell
      暂时测试没有反馈我有什么问题,哈哈
      2020-06-24
      回复
登录 后发表内容