【vue+elementUI】校验el-form输入的内容是否符合规则+关闭页面清空el-form+关闭弹窗时清空表格所有勾选项+动态显示勾选条数

校验el-form输入的内容是否符合规则

需求:

       校验el-form输入的内容是否符合规则

实现过程:

        1.创建表单。包括两个input输入框和一个select下拉框。

<el-form
        :inline="true"
        :model="searchList"
        ref="search"
        :label-position="labelPosition"
        label-width="70px"
        :rules="rules"
      >
        <el-form-item label="姓名" prop="name" label-width="70px">
          <el-input v-model="searchList.name" :clearable="true" style="width:150px"></el-input>
        </el-form-item>

        <el-form-item label="年龄" prop="age" label-width="70px">
          <el-input v-model.number="searchList.age" :clearable="true" style="width:150px"></el-input>
        </el-form-item>

        <el-form-item label="性别" prop="gender" label-width="70px">
			<!-- filterable 是否可搜索
				 clearable  是否可清空
				 default-first-option 在输入框按下回车,选择第一个匹配项。需配合 filterable 或 remote 使用-->
          <el-select
            v-model="searchList.gender"
            filterable
            clearable
			default-first-option
            placeholder="请选择性别"
			style="width:150px"
          >
            <el-option
              v-for="item in genderList"
              :key="item.id"
              :label="item.value"
              :value="item.id"
            ></el-option>
          </el-select>
        </el-form-item>
      </el-form>

        使用的el-form各属性含义如下:

        inline 属性可以让表单域变为行内的表单域

        model 表单域model字段,在使用 validate、resetFields 方法的情况下,该属性是必填的

        label-position 表单域标签的位置,如果值为 left 或者 right 时,则需要设置 label-width

        label-width 标签宽度

        rules 表单验证规则

       

 2.定义验证规则。姓名和性别不能为空。年龄不能为非负数值。

<script>
export default {
  data() {
    return {
      searchList: {
        name: "",
        age: "",
        gender: ""
      }, // 传入Form组件的model中的字段
      genderList: [
        { id: 1, value: "女" },
        { id: 2, value: "男" }
      ],
      rules: {
        // el-form验证规则
        name: [{ required: true, message: "姓名不能为空" }],
        age: [
          { type: "number", message: "年龄必须为数字值" },
          {
            //验证为非负数
            validator: (rule, value, callback) => {
              if (value < 0) {
                callback(new Error("年龄不能为负数"));
              } else {
                callback();
              }
            }
          }
        ],
        gender: [{ required: true, message: "性别不能为空" }]
      }
    };
  },

};
</script>

        3.页面添加一个保存按钮,绑定save()方法对验证的数据进行处理。如果符合验证规则,关闭界面。如果不符合验证规则,进行提示。

<el-button @click="save()">确定</el-button>

save(){
		// 验证el-form是否符合验证规则
		this.$refs.search.validate(vaild=>{
			if(vaild){
				this.isShow = false;
			} else {
				this.$message.error({showClose: true,message: '请按规范填写数据', type: 'error'})
				return
			}
		})
	},

效果:

        输入的内容不符合规则时,展示效果如下

        点击确定弹出的提示框展示效果如下

实现关闭页面清空el-form所有搜索项

需求:

        实现关闭页面清空el-form所有搜索项

实现过程:

        给想要清空搜索项的el-form绑定一个ref,然后使用this.$refs.XXX.resetFields()即可。

this.$refs.search.resetFields()

        resetFields:对整个表单进行重置,将所有字段值重置为初始值并移除校验结果。

关闭弹窗时清空表格所有勾选项

需求:

       关闭弹窗时清空表格所有勾选项

实现过程:

        1.创建表格

 <el-table :data="tableList" ref="table" @selection-change="orderSelectionChange">
        <el-table-column align="center" type="selection" width="60px"></el-table-column>
        <el-table-column align="center" type="index" label="序号" width="60px"></el-table-column>
        <el-table-column align="center" prop="tableName" label="姓名" min-width="80"></el-table-column>
        <el-table-column align="center" prop="tableAge" label="年龄" min-width="80"></el-table-column>
      </el-table>


 tableList: [
        { tableName: "李四", tableAge: "18" },
        { tableName: "张三", tableAge: "20" }
      ] // 弹窗内列表数据

        2.关闭时添加取消所有勾选项

 this.$refs.table.clearSelection(); //取消所有勾选项

动态显示勾选条数

需求:

       动态显示勾选条数

实现过程:

        1.创建一个div,el-table使用@selection-change


<div style="background:rgba(98, 194, 208,0.5);padding:10px 0px;">勾选条数:{{selectedList.length}}条</div>
 <el-table :data="tableList" ref="table" @selection-change="orderSelectionChange">
        <el-table-column align="center" type="selection" width="60px"></el-table-column>
        <el-table-column align="center" type="index" label="序号" width="60px"></el-table-column>
        <el-table-column align="center" prop="tableName" label="姓名" min-width="80"></el-table-column>
        <el-table-column align="center" prop="tableAge" label="年龄" min-width="80"></el-table-column>
      </el-table>

        2.orderSelectionChange方法内容如下

// 统计勾选个数
    orderSelectionChange(selection) {
      // 更新勾选状态
      this.tableList.forEach(val => {
        val.checked = selection.includes(val);
      });
      // 统计勾选的行数
      this.selectedList = this.tableList.filter(val => val.checked);
    },

效果:

完整代码如下:

<template>
  <div class="el_form">
    <h1 class="info_title"></h1>
    <el-button type="primary" @click="showDialog()">点击此按钮打开弹窗</el-button>

    <!--title:标题
        visible:是否显示弹窗
        width:弹窗页面宽度
    before-close:关闭前的回调, 	function(done),done 用于关闭 Dialog-->
    <el-dialog :title="title" :visible.sync="isShow" width="60%" :before-close="close">
      <!-- inline 属性可以让表单域变为行内的表单域
            model 表单域model字段,在使用 validate、resetFields 方法的情况下,该属性是必填的 
            label-position 表单域标签的位置,如果值为 left 或者 right 时,则需要设置 label-width
            label-width 标签宽度
      rules 表单验证规则-->
      <el-form
        :inline="true"
        :model="searchList"
        ref="search"
        :label-position="labelPosition"
        label-width="70px"
        :rules="rules"
      >
        <el-form-item label="姓名" prop="name" label-width="70px">
          <el-input v-model="searchList.name" :clearable="true" style="width:150px"></el-input>
        </el-form-item>

        <el-form-item label="年龄" prop="age" label-width="70px">
          <el-input v-model.number="searchList.age" :clearable="true" style="width:150px"></el-input>
        </el-form-item>

        <el-form-item label="性别" prop="gender" label-width="70px">
          <!-- filterable 是否可搜索
				 clearable  是否可清空
          default-first-option 在输入框按下回车,选择第一个匹配项。需配合 filterable 或 remote 使用-->
          <el-select
            v-model="searchList.gender"
            filterable
            clearable
            default-first-option
            placeholder="请选择性别"
            style="width:150px"
          >
            <el-option
              v-for="item in genderList"
              :key="item.id"
              :label="item.value"
              :value="item.id"
            ></el-option>
          </el-select>
        </el-form-item>
      </el-form>

      <div style="background:rgba(98, 194, 208,0.5);margin:10px 0px;">勾选条数:{{selectedList.length}}条</div>
      <el-table :data="tableList" ref="table" @selection-change="orderSelectionChange">
        <el-table-column align="center" type="selection" width="60px"></el-table-column>
        <el-table-column align="center" type="index" label="序号" width="60px"></el-table-column>
        <el-table-column align="center" prop="tableName" label="姓名" min-width="80"></el-table-column>
        <el-table-column align="center" prop="tableAge" label="年龄" min-width="80"></el-table-column>
      </el-table>

      <el-button @click="save()">确定</el-button>
      <el-button @click="close()" type="primary">关闭</el-button>
    </el-dialog>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isShow: false, // 弹窗是否显示
      title: "", // 弹窗标题
      labelPosition: "right", // form表单的标签的对齐方式
      searchList: {
        name: "",
        age: "",
        gender: ""
      }, // 传入Form组件的model中的字段
      genderList: [
        { id: 1, value: "女" },
        { id: 2, value: "男" }
      ],
      rules: {
        // el-form验证规则
        name: [{ required: true, message: "姓名不能为空" }],
        age: [
          { type: "number", message: "年龄必须为数字值" },
          {
            //验证为非负数
            validator: (rule, value, callback) => {
              if (value < 0) {
                callback(new Error("年龄不能为负数"));
              } else {
                callback();
              }
            }
          }
        ],
        gender: [{ required: true, message: "性别不能为空" }]
      },
      tableList: [
        { tableName: "李四", tableAge: "18" },
        { tableName: "张三", tableAge: "20" }
      ], // 弹窗内列表数据
      selectedList: [] // 弹窗内列表勾选的数据
    };
  },
  methods: {
    // 打开弹窗
    showDialog() {
      this.isShow = true;
      this.title = "标题";
    },
    // 统计勾选个数
    orderSelectionChange(selection) {
      // 更新勾选状态
      this.tableList.forEach(val => {
        val.checked = selection.includes(val);
      });
      // 统计勾选的行数
      this.selectedList = this.tableList.filter(val => val.checked);
    },
    // 保存
    save() {
      // 验证el-form是否符合验证规则
      this.$refs.search.validate(vaild => {
        if (vaild) {
          this.$refs.search.resetFields(); // 清空所有搜索框的数据
          this.isShow = false;
        } else {
          this.$message.error({
            showClose: true,
            message: "请按规范填写数据",
            type: "error"
          });
          return;
        }
      });
    },
    // 关闭弹窗
    close() {
      //显示确定关闭的弹窗
      this.$confirm("确认关闭?")
        .then(_ => {
          this.isShow = false;
          this.$refs.search.resetFields(); // 清空所有搜索框的数据
          this.$refs.table.clearSelection(); //取消所有勾选项
          done();
        })
        .catch(_ => {});
    }
  }
};
</script>

<style lang="scss" scoped>
.info_title {
  text-align: center;
  margin: 20px 0px;
}
</style>

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以先在el-form的submit方法中使用axios发送请求,具体的方法如下: 在template中: ``` <el-form ref="form" :model="form" :rules="rules" label-width="120px"> <el-form-item label="用户名" prop="username"> <el-input v-model="form.username"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input type="password" v-model="form.password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> <el-button @click="resetForm">重置</el-button> </el-form-item> </el-form> ``` 在script中: ``` import axios from 'axios'; export default { data() { return { form: { username: '', password: '' }, rules: { username: [{ required: true, message: '请输入用户名', trigger: 'blur' }], password: [{ required: true, message: '请输入密码', trigger: 'blur' }] } }; }, methods: { submitForm() { this.$refs.form.validate(valid => { if (valid) { axios.post('/api/login', this.form).then(response => { if (response.data.code === 200) { // 登录成功,跳转到首页 this.$router.push('/home'); } else { this.$message.error('登录失败'); } }); } else { return false; } }); }, resetForm() { this.$refs.form.resetFields(); } } }; ``` 在上述代码中,我们先引入了axios,使用axios发送POST请求到后台的/api/login接口,参数为表单中的form数据。如果接口返回的状态码为200,说明登录成功,此可以跳转到首页。如果接口返回的状态码不为200,说明登录失败,此可以给用户提示登录失败信息。 至此,vueelement-ui的form组件与axios的api接口就配合使用成功了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值