# 状态控制
状态是so-form最关心的问题之一,通过状态的控制,能够在传统的 新建、编辑、详情 的场景中,使用同一份代码,提高开发效率。
除此之外,引入状态的表单,也能够轻松地去应对纷繁复杂的业务需求。
# Demo
<template>
  <iForm label-width="100px" :rules="rules" :model="model" ref="ruleForm">
    <iFormRows :rows="rows"></iFormRows>
      <el-button @click="validate">validate</el-button>
      <el-button @click="reset">reset</el-button>
  </iForm>
</template>
<script>
export default {
  data: () => ({
    model: {
      job: '',
      age: ''
    },
    rules: {
      'job': [
          { required: true, message: '请输入活动名称', trigger: 'blur' },
          { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
      ],
      age: [
        {type: "number", required: true, transform(value) {
            return parseInt(value, 10)
        }},
        {validator(rule, value, callback, source, options) {
            if(value < 18){
                callback(['too young']);
            }
            callback([])
        }}
      ]
    }
  }),
  computed: {
    rows (h) {
      return [
        { label: 'name', name: 'job', type: 'input' },
        { label: 'age', name: 'age', type: 'input'}
      ]
    }
  },
  methods: {
    reset () {
      this.$refs.ruleForm.resetFields()
    },
    validate () {
      this.$refs.ruleForm.validate()
    }
  }
}
</script>
# 状态枚举
表单状态分为以下三种类型:edit(编辑态), preview(预览态), disabled(禁用态)
# getGlobalStatus()
获取form表单内的组件状态
  this.$refs.xxxx.getGlobalStatus(); // get global status
# setGlobalStatus(status)
设置form表单全局状态
  this.$refs.xxxx.setGlobalStatus('edit'); // set up global status
# getStatus(name)
获取单个组件状态
this.$refs.xxxx.getStatus('username'); // get single item's status
# setStatus(name, status)
设置单个组件状态
this.$refs.xxxx.setStatus('username', 'edit'); // modify single item's status
# 组件适配
为了能够更好实现状态控制,开发者需要对引入的组件进行 "适配"。 常用的表单组件通常只具有编辑态,因此要达到状态控制的目的,我们需要对他们进行改造。
目前我们已经对社区流行的组件库进行了统一的适配,开发者只需要引入这些适配层就可以直接使用了。