wncf's blog wncf's blog
首页
书签
  • JavaScript
  • vue
  • css
  • 收藏正则
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

wncf

编写代码并热爱生活
首页
书签
  • JavaScript
  • vue
  • css
  • 收藏正则
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • JavaScript总结

    • javascript面试题
    • 数据类型判断
    • js一些技巧
    • 正则表达式
    • 常用的数组方法
    • 对象常用的方法
    • typeScript
    • js常用库
    • 浏览器常用api
    • js常用工具函数
    • 三级目录

  • css总结

  • 其他

  • 前端
  • vue总结
  • ui框架总结
wncf
2022-02-09
目录

antDesign

# 栅格布局

栅格布局通过row 设置行,通过col设置列,ant的栅格为24栅格系统

col属性的span控制占一行的几份(0为不显示,24会占满一行)

<a-row>
    <a-col></a-col>
</a-row>
# 配合a-form时踩坑

控制 整体需求居中对齐,label文字居右对齐

<a-form>
	<a-row :gutter="24">
    	<a-col :span='12'>
                <a-form-item 
                    :label-col="formItemLayout.labelCol" 
                    :wrappercol="formItemLayout.wrapperCol" label="Label">
          <a-input
            placeholder="请输入"
          />
        </a-form-item>
        </a-col>
    </a-row>
</a-form>
data>
const formItemLayout = {
  labelCol: { span: 6 },  //控制label占比
  wrapperCol: { span: 10 } //控制输入框占比
}

# 表单

a-form 组件加上 :form="form"

//并且在beforeCreate阶段加上,data中不需要声明form
 this.form = this.$form.createForm(this, { name: 'dynamic_form_item' })

//表单项需要使用
v-decorator="['绑定的字段名', { rules: [{ required:(是否必填), message: '请选择' }], initialValue: '默认值' }]"
//绑定

即可通过this.form.vaidateFelds((err,form)=>{err:错误信息,form:成功后的表单对象})验证并获取表单


更灵活的使用方式

# 数据请求完毕自动填充所有表单项

this.form.setFieldsValue({
    '表单项':value
    ...
})

# 自定义表单字段

例如ant上传文件组件是没有value值的,这时我们可以自定义一个表单字段,监听上传完成事件,操作该字段,收集上传完成后的url

beforeCreate(){
    this.form = this.$form.createForm(this, { name: 'dynamic_form_item' }) 
    this.form.getFieldDecorator('keys', { initialValue: [1], preserve: true })
    //keys:表单字段  
    //initialValue: 默认值
    //preserve:布尔值,true表示 即便字段不再使用,也保留该字段的值
    //更多属性查询:https://www.antdv.com/components/form-cn/#API
}

上传文件组件的beforeUpload事件

-上传请求完毕
	-拿到url根据场景是否需要格式化
	const {url,id,fileName} = res.result
	this.fileList.push({
            name: fileName,
            uid: id,
            url,
            status: 'done'
          })
	this.form.setFieldsValue({
        绑定字段:this.fileList
    })

文件移除时remove回调更新form

handleRemove(data){
    //过滤掉
    this.fileList=this.fileList.filter(item=>item.uid !== data.uid)
    this.form.setFieldsValue({...}) //设置
    //this.fileList为upload绑定的上传后的值
}

# 动态表单(多个)

通过维护一个keys数组遍历生成表单项与获取数据用

在a-form下使用v-for循环生成

<a-row v-for="k of myFormKeys" :key="k">
    //myFormKeys 的默认值 应该从0开始 
    // myFormKeys:[0]
  • 数据通过遍历k进行动态绑定
v-decorator="[`paidRemark[${k}]`, { rules: [{ required: false, message: '请输入摘要 ' }]}]"

新增表单项目方法

addFormItem(){
    // 取最后一项的值
	const lastkey = this.myFormKeys[this.myFormKeys.length - 1]
    this.myFormKeys.push(lastkey + 1)
}

表单项的最后应该有 删除图标,删除对应表单项

<a-icon
 v-show="myFormKeys.length != 1"
 @click="removeKey(k)"
 class="dynamic-delete-button"
 type="minus-circle-o"
/>
// removeKey方法
 removeKey(k){
   this.myFormKeys = this.myFormKeys.filter((item) => item !== k)
 }

每个表单项目默认值设置,使用 v-decorator的options.initialValue设置,但注意的是如果有清空表单的需要,使用form.resetFileds()清空时表单项会重置成该值

  • 收集数据
Submit(){
this.form.validateFields((err, values) => {
    //格式化数据 
    //values的数据一般为{key:[keyValue1,keyValue2]...}
    //接口一般需要[{key:value},{key:value}...]
const data = []
          for (const item of this.myFormKeys) {
            // item 当前有值的下标
            data.push({
                key: values.key[item]
            })
          }
}
  //后续逻辑
编辑 (opens new window)
上次更新: 2022/06/18, 01:50:56
最近更新
01
腾讯云宝塔自动化部署方案
03-22
02
vscode格式化
12-11
03
github使用问题与解决方案
09-16
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Wncf | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式