返回

用 Element-UI Form 表单对树型结构中的必填项进行验证!

前端

树型结构是一种常用的数据结构,它可以很好地表示层级关系。在前端开发中,树型结构经常被用来表示目录结构、组织结构等。Element-UI 是一款基于 Vue.js 的前端 UI 框架,它提供了丰富的组件库,其中包括树形结构组件。

Element-UI 的树形结构组件非常灵活,它支持多种验证方式。例如,我们可以使用 required 属性来验证树形结构中的必填项。

验证树形结构中的必填项

假设我们有一个树形结构,如下所示:

const treeData = [
  {
    label: '根节点',
    children: [
      {
        label: '子节点1',
        children: [
          {
            label: '孙节点1-1',
            required: true
          },
          {
            label: '孙节点1-2',
            required: true
          }
        ]
      },
      {
        label: '子节点2',
        children: [
          {
            label: '孙节点2-1'
          },
          {
            label: '孙节点2-2'
          }
        ]
      }
    ]
  }
];

为了验证树形结构中的必填项,我们可以使用 required 属性。如下所示:

<el-form :model="treeData">
  <el-tree
    :data="treeData"
    show-checkbox
    node-key="id"
    :props="{ children: 'children', label: 'label' }"
  >
    <span slot-scope="{ node }">
      <el-input v-if="node.required" :model.value="node.label" placeholder="必填"></el-input>
    </span>
  </el-tree>
</el-form>

这样,当我们提交表单时,如果必填项为空,则会提示错误信息。

自定义验证规则

除了使用 required 属性进行验证,我们还可以自定义验证规则。例如,我们可以自定义一个验证规则,来验证树形结构中的某个字段是否为数字。如下所示:

const treeData = [
  {
    label: '根节点',
    children: [
      {
        label: '子节点1',
        children: [
          {
            label: '孙节点1-1',
            required: true
          },
          {
            label: '孙节点1-2',
            required: true
          }
        ]
      },
      {
        label: '子节点2',
        children: [
          {
            label: '孙节点2-1'
          },
          {
            label: '孙节点2-2'
          }
        ]
      }
    ]
  }
];

const rules = {
  label: [
    { required: true, message: '该字段不能为空', trigger: 'blur' },
    { validator: (rule, value, callback) => {
      if (!/^\d+$/.test(value)) {
        callback(new Error('该字段必须为数字'));
      } else {
        callback();
      }
    }, trigger: 'blur' }
  ]
};

const treeData = [
  {
    label: '根节点',
    children: [
      {
        label: '子节点1',
        children: [
          {
            label: '孙节点1-1',
            required: true
          },
          {
            label: '孙节点1-2',
            required: true
          }
        ]
      },
      {
        label: '子节点2',
        children: [
          {
            label: '孙节点2-1'
          },
          {
            label: '孙节点2-2'
          }
        ]
      }
    ]
  }
];

const rules = {
  label: [
    { required: true, message: '该字段不能为空', trigger: 'blur' },
    { validator: (rule, value, callback) => {
      if (!/^\d+$/.test(value)) {
        callback(new Error('该字段必须为数字'));
      } else {
        callback();
      }
    }, trigger: 'blur' }
  ]
};

const treeData = [
  {
    label: '根节点',
    children: [
      {
        label: '子节点1',
        children: [
          {
            label: '孙节点1-1',
            required: true
          },
          {
            label: '孙节点1-2',
            required: true
          }
        ]
      },
      {
        label: '子节点2',
        children: [
          {
            label: '孙节点2-1'
          },
          {
            label: '孙节点2-2'
          }
        ]
      }
    ]
  }
];

const rules = {
  label: [
    { required: true, message: '该字段不能为空', trigger: 'blur' },
    { validator: (rule, value, callback) => {
      if (!/^\d+$/.test(value)) {
        callback(new Error('该字段必须为数字'));
      } else {
        callback();
      }
    }, trigger: 'blur' }
  ]
};

<el-form :model="treeData" :rules="rules">
  <el-tree
    :data="treeData"
    show-checkbox
    node-key="id"
    :props="{ children: 'children', label: 'label' }"
  >
    <span slot-scope="{ node }">
      <el-input v-if="node.required" :model.value="node.label" placeholder="必填"></el-input>
    </span>
  </el-tree>
</el-form>

这样,当我们提交表单时,如果某个字段不符合验证规则,则会提示错误信息。

总结

Element-UI 的树形结构组件非常灵活,它支持多种验证方式。我们可以使用 required 属性来验证树形结构中的必填项,也可以自定义验证规则来验证树形结构中的某个字段是否符合特定格式。