AvueAvue
首页
  • 开发指南
  • Skill开发
  • 在线测试工具
  • Form组件
  • Crud组件
  • Default组件
  • Data组件
  • Component组件
产品
工作台
授权
联系
2.x文档
个人支付接口
首页
  • 开发指南
  • Skill开发
  • 在线测试工具
  • Form组件
  • Crud组件
  • Default组件
  • Data组件
  • Component组件
产品
工作台
授权
联系
2.x文档
个人支付接口
  • Form属性文档
  • Object对象用法
  • Input 输入框
  • InputOtp 一次性密码输入
  • Number 数字输入框
  • Select选择框
  • Cascader级联选择器
  • Checkbox多选框
  • Radio单选框
  • Date日期
  • Time 时间
  • Switch开关
  • Upload附件上传
  • Title标题
  • Array数组框
  • Dynamic子表单
  • Tree树型选择框
  • Icon图标选择器
  • Table表格选择器
  • Map坐标选择器
  • Color颜色选择器
  • Input Cron Cron表达式编辑器
  • InputTag 输标签输入框
  • Mention 提及框
  • Rate评价
  • Slider滑块
  • 表单布局
  • 表单验证
  • 表单默认值
  • 表单操作按钮
  • 表单自定义
  • 表单数据字典
  • 表单多级联动
  • 表单数据格式
  • 表单组件事件
  • 表单高级用法

表单高级用法

表单初始化

效果预览可直接操作下方示例
正在加载示例…
<template>
  <el-button type="primary"
             @click="handleReload">Key初始化</el-button>
  <avue-form :key="reload"
             :option="option"></avue-form>
</template>

<script setup>
import { ref } from 'vue';
import { ElMessage } from 'element-plus';
const reload = ref(Math.random());
const option = {
  border: true,
  align: 'center',
  menuAlign: 'center',
  column: [
    {
      label: '姓名',
      prop: 'name'
    },
    {
      label: '性别',
      prop: 'sex'
    },
    {
      label: '省份',
      prop: 'province',
      type: 'select',
      props: {
        label: 'name',
        value: 'code'
      },
      dicUrl: `https://api.avuejs.com/area/getProvince`,
      rules: [
        {
          required: true,
          message: '请选择省份',
          trigger: 'blur'
        }
      ]
    }
  ]
};

function handleReload () {
  reload.value = Math.random();
  ElMessage.success('初始化完成');
}
</script>

配置项服务端加载

提示

  • 这里没有走真真的服务器请求,而是做了一个模拟
效果预览可直接操作下方示例
正在加载示例…
<template>
  <el-button type="primary"
             icon="el-icon-sort"
             @click="getOption">服务端加载</el-button>
  <avue-form :key="reload"
             v-model="form"
             :option="option"
             v-loading="loading"></avue-form>
</template>

<script setup>
import { ref } from 'vue';
import { ElMessage } from 'element-plus';
const reload = ref(Math.random());
const loading = ref(true);
const form = ref({});
const option = ref({});

function getOption () {
  ElMessage.success('模拟2s后服务端动态加载');
  setTimeout(() => {
    option.value = {
      border: true,
      align: 'center',
      menuAlign: 'center',
      column: [
        {
          label: '姓名',
          prop: 'name'
        },
        {
          label: '性别',
          prop: 'sex'
        },
        {
          label: '省份',
          prop: 'province',
          type: 'select',
          props: {
            label: 'name',
            value: 'code'
          },
          dicUrl: `https://api.avuejs.com/area/getProvince`,
          rules: [
            {
              required: true,
              message: '请选择省份',
              trigger: 'blur'
            }
          ]
        }
      ]
    };
    form.value = {
      name: '张三',
      sex: '男',
      province: '110000'
    };
    reload.value = Math.random();
    loading.value = false;
  }, 2000);
}
</script>

配置项切换

效果预览可直接操作下方示例
正在加载示例…
<template>
  <el-button type="primary"
             icon="el-icon-sort"
             @click="handleSwitch">切 换</el-button>
  <br /><br />
  <avue-form :key="reload"
             v-model="form"
             :option="option"></avue-form>
</template>

<script setup>
import { ref, onMounted } from 'vue';

const reload = ref(Math.random());
const type = ref(true);
const form = ref({
  name: '张三',
  sex: '男',
  username: 'smallwei',
  password: 'smallwei'
});
const option = ref({});

const option1 = {
  addBtn: false,
  column: [
    {
      label: '昵称',
      prop: 'name'
    }
  ]
};

const option2 = {
  addBtn: false,
  column: [
    {
      label: '用户名',
      prop: 'username'
    },
    {
      label: '密码',
      prop: 'password',
      type: 'password'
    },
    {
      label: '姓名',
      prop: 'name'
    }
  ]
};

function handleSwitch () {
  type.value = !type.value;
  if (type.value) {
    option.value = option1;
  } else {
    option.value = option2;
  }
  reload.value = Math.random();
}

onMounted(() => {
  handleSwitch();
});
</script>
最后更新:
贡献者: smallwei
Prev
表单组件事件