vue-element 表单操作合集

本文介绍了一个基于Vue的用户注册表单实现,详细解释了如何使用Element UI进行表单布局、输入验证及响应式设计。文章展示了如何通过正则表达式验证手机号和密码强度,以及如何使用Axios向后端发送POST请求来完成用户信息的注册。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>
  <div class="background" style="padding-top: 10%">
    <div class="news">
      <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-position="center" label-width="90px" align="center">
        <el-form-item label="用户名" prop="userName" >
          <el-input v-model="ruleForm.userName" placeholder="请输入3-8字符用户名"></el-input>
        </el-form-item>
        <el-form-item label="密码" prop="password">
          <el-input type="password" v-model="ruleForm.password" autocomplete="off" placeholder="请输入6-15位密码"></el-input>
        </el-form-item>
        <el-form-item label="确认密码" prop="againPw">
          <el-input type="password" v-model="ruleForm.againPw" autocomplete="off" placeholder="请输入6-15位确认密码"></el-input>
        </el-form-item>
        <el-form-item label="手机号" prop="phone">
          <el-input v-model="ruleForm.phone" placeholder="请输入手机号"></el-input>
        </el-form-item>
        <el-form-item label="邮箱" prop="email">
          <el-input v-model="ruleForm.email" placeholder="请输入邮箱"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" v-model="ruleForm" @click="submitForm">添加用户</el-button>
          <br>
          <router-link to="/">已有账号,点此登录</router-link>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>

<script>
    export default {
        name: "register",
      data () {
        var validatePass = (rule, value, callback) => {
          if (value === '') {
            callback(new Error('请输入密码'));
          } else {
            if (this.ruleForm.againPw !== '') {
              this.$refs.ruleForm.validateField('againPw');
            }
            callback();
          }
        };
        var validatePass2 = (rule, value, callback) => {
          if (value === '') {
            callback(new Error('请再次输入密码'));
          } else if (value !== this.ruleForm.password) {
            callback(new Error('两次输入密码不一致!'));
          } else {
            callback();
          }
        };
        var checkPhone = (rule, value, callback) => {
          if (!value) {
            return callback(new Error('请输入手机号'));
          } else {
            const reg = /^1[3|4|5|7|8][0-9]\d{8}$/
            console.log(reg.test(value));
            if (reg.test(value)) {
              callback();
            } else {
              return callback(new Error('请输入正确的手机号'));
            }
          }
        };
        return {
          background: {
            backgroundImage: "url(" + require("../assets/pm.jpg") + ")",
            backgroundPosition: "center center",
            backgroundRepeat: "no-repeat",
            backgroundSize: "cover",
          },
          ruleForm : {
            userName:'',
            password:'',
            againPw:'',
            email: '',
            phone: '',
          },
          rules : {
            userName: [{ required: true, message: '请输入3-8字符的用户名', trigger: 'blur' },
              { min: 3, max: 15, message: '长度在 3 到 15 个字符', trigger: 'blur' }],
            password: [{ required: true,validator: validatePass, trigger: 'blur' }],
            againPw: [{required: true, validator: validatePass2, trigger: 'blur' }],
            email:[{ required: true, message: '请输入邮箱地址', trigger: 'blur' },
              { type:'email', message: '请输入正确的邮箱地址', trigger: 'blur' }],
            phone:[{ required: true,validator:checkPhone, trigger: 'blur' }],
          },
        }
      },
      methods:{
        submitForm() {
          this.$refs.ruleForm.validate((valid) => {
            if (valid) {
              this.ruleForm.action = "add"
              console.log(this.ruleForm);
              this.$axios
                .post('/user', this.$qs.stringify(this.ruleForm), {headers: {'Content-Type': "application/x-www-form-urlencoded"}})
                .then(response => {
                  withCredentials: true
                  console.log(response.data)
                  if (response.data.code == 200) {
                    this.$message({showClose: true, message: '添加用户成功!', type: 'success'});
                    return true;
                  } else if (response.data.code == 207) {
                    this.$message({showClose: true, message: '该邮箱已经被注册!', type: 'error'});
                    return false;
                  } else {
                    this.$message({showClose: true, message: '添加用户失败!', type: 'error'});
                    return false;
                  }
                })
                .catch(error => {
                  console.log(error)
                })
            } else {
              return false;
              console.log("false!!!!!");
            }
          })
        }
      }
    }
</script>

<style scoped>

</style>
<style>
  .background{
    position:fixed;
    top: 0;
    left: 0;
    width:100%;
    height:100%;
    min-width: 1000px;
    z-index:-10;
    zoom: 1;
    background-color: black;
    background-repeat: no-repeat;
    background-size: cover;
    -webkit-background-size: cover;
    -o-background-size: cover;
    background-position: center 0;
    background-image: url("../assets/pm.jpg");
  }
  .el-input{
    width: 250px;
  }
  .el-button{
    width: 250px;
  }
</style>

 

### 如何在 Vue3 中实现文本或元素的左对齐 在 Vue3 中,可以通过多种方法实现文本或元素的左对齐。以下是几种常见的实现方式: #### 方法一:通过 `v-bind` 动态绑定样式 可以利用 Vue 的 `v-bind` 指令动态设置元素的样式属性,从而实现左对齐的效果。 ```html <template> <div :style="{ textAlign: alignment }"> <p>这是一个左对齐的段落</p> </div> </template> <script> export default { data() { return { alignment: 'left' // 设置为 left 表示左对齐 }; } }; </script> ``` 这种方法允许开发者根据数据的变化动态调整对齐方式[^1]。 --- #### 方法二:使用静态 CSS 类 如果不需要动态改变对齐方式,可以直接定义一个 CSS 类并将其应用于目标元素。 ```css .left-aligned { text-align: left; } ``` ```html <template> <div class="left-aligned"> <p>这是一个左对齐的段落</p> </div> </template> ``` 此方法简单直观,适合固定样式的场景。 --- #### 方法三:处理复杂情况——混合对齐需求 对于某些复杂的布局需求(如部分元素需要特殊对齐),可以在计算属性中生成对应的样式对象,并传递给组件。 ```html <template> <div v-for="(item, index) in items" :key="index" :style="getItemStyle(item)"> {{ item }} </div> </template> <script> export default { data() { return { items: ['带书名号的内容', '不带书名号的内容'] }; }, methods: { getItemStyle(item) { const baseStyle = { textAlign: 'left' }; // 默认左对齐 if (item.includes('《')) { Object.assign(baseStyle, { color: 'blue' }); // 可扩展其他样式逻辑 } return baseStyle; } } }; </script> ``` 这种方案适用于需要根据不同条件自定义样式的场景[^3]。 --- #### 方法四:基于 Flexbox 或 Grid 布局 Flexbox 和 Grid 是现代前端开发中的强大工具,能够轻松解决复杂的对齐问题。 ##### 使用 Flexbox 左对齐 ```css .container { display: flex; align-items: start; /* 子项垂直方向顶部对齐 */ } .item { margin-right: 10px; /* 调整间距 */ text-align: left; /* 文本左对齐 */ } ``` ```html <template> <div class="container"> <div class="item">项目 A</div> <div class="item">项目 B</div> </div> </template> ``` ##### 使用 Grid 布局 ```css .grid-container { display: grid; grid-template-columns: repeat(2, minmax(100px, 1fr)); gap: 10px; } .grid-item { text-align: left; } ``` ```html <template> <div class="grid-container"> <div class="grid-item">网格项 A</div> <div class="grid-item">网格项 B</div> </div> </template> ``` 这两种布局方式都支持更灵活的设计需求,尤其适合响应式设计[^4]。 --- #### 方法五:针对特定框架(Element Plus) 如果是基于 Element Plus 开发的应用程序,则可通过插槽机制结合内联样式完成对齐操作。 ```html <el-col :span="6"> <el-form-item> <div slot="label" style="text-align:left;">标签名称:</div> <el-input size="mini" v-model="inputValue"></el-input> </el-form-item> </el-col> ``` 注意这里的 `text-align:last` 属性仅适用于最后一行强制对齐的情况,在常规左对齐时无需引入额外规则[^4]。 --- ### 总结 以上介绍了五种不同的技术手段来达成 Vue3 下的文本/元素左对齐目的,具体选用哪一种取决于实际业务背景以及个人偏好。无论是简单的静态类还是高级动态渲染均能有效满足相应的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值