vue组件化(文本显示,事件传递,以及父子组件传值)

本文介绍了一个使用Vue.js创建的个人信息组件,包括姓名、性别、身份证号等字段的输入与验证,以及如何在页面中引用该组件。

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

首先创建一个vue文件用来写组件。
如下

<!-- 完善个人信息组件  -->
<template>
  <div>
    <el-dialog :title="title" :visible.sync="queryDialog" width="800px">
    <el-form label-width="80px" :rules="rules" ref="userInfo" :model="userInfo">
      <div class="allInput">
        <el-row>
          <el-col :span="12">
            <el-form-item label="姓名" prop="name">
              <el-input v-model="userInfo.name"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="性别" prop="gender">
              <el-select v-model="gender" placeholder="请选择" style="width:100%">
                <el-option
                  v-for="item in options"
                  :key="item.gender"
                  :label="item.label"
                  :value="item.gender"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="身份证号" prop="idenno">
              <el-input v-model="userInfo.idenno"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="出生日期" prop="birthday">
              <el-date-picker
                v-model="userInfo.birthday"
                type="date"
                placeholder="选择日期"
              ></el-date-picker>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="邮箱" prop="email">
              <el-input v-model="userInfo.email"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
      </div>
    </el-form>
     <span slot="footer" class="dialog-footer">
            <el-button type="primary" @click="userInfoSave">确 定</el-button>
            <el-button type="info" icon="el-icon-info" :plain="true" @click="resetform('userInfo')">重置</el-button>
            <el-button type="primary" @click="closeUserInfo">取 消</el-button>
    </span>
  </el-dialog>
  </div>
</template>

<script>
export default {
  props: {
  //向外props需要显示的和需要传递的对象或者数组  如果是数组则为Array 
    userInfo: {
      type: Object,
      default() {
        return {};
      }
    },
    //显示标题内容,由于不确定标题内容是否为固定内容。所以我们还是写成动态的
    title:{
        type:String,
        default(){
            return ''
        }
    },
    //操控弹出框的
    queryDialog:{
        type:Boolean,
        default(){
            return false
        }
    }
  },
  data() {
    return {
      options: [
        {
          gender: "M",
          label: "男"
        },
        {
          gender: "F",
          label: "女"
        }
      ],
      gender: "",
      rules: {
        name: [
          { required: true, message: "请输入您的姓名", trigger: "blur" },
          { min: 2, max: 5, message: "请输入正确的姓名", trigger: "blur" }
        ],
        gender: [
          { required: true, message: "请选择您的性别", trigger: "blur" }
        ],
        birthday: [
          {
            type: "date",
            required: true,
            message: "请选择您的出生日期",
            trigger: "blur"
          }
        ],
        idenno: [
          { required: true, message: "请输入身份证号", trigger: "blur" },
          {
            pattern: /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/,
            message: "证件号码格式有误!",
            trigger: "blur"
          }
        ],
        email: [
          { required: true, message: "请输入您的邮箱", trigger: "blur" },
          {
            pattern: /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,
            message: "邮箱格式错误",
            trigger: "blur"
          }
        ]
      }
    };
  },

  components: {},

  computed: {},

  methods: {
  //点击事件需要向父进行传递
    userInfoSave(item){
         console.log(item);
         this.$emit('userInfoSave',item);
    },
    closeUserInfo(item){
        console.log(item);
        this.$emit('closeUserInfo',item);
    },
    resetform(item){
        this.$emit('resetform',item);
    }
  },
  watch:{
  //监听选择性别的数值状态
      gender(newVal){
          this.userInfo.gender=newVal
      }
  }
};
</script>
<style lang='less' scoped>
</style>

接下来就是在页面中引用了

//用驼峰命名法  然后再注册一下组件
import verifiCation from "@/components/verification";
components: { verifiCation },

在页面中引用就需要这样用

<verifi-cation :userInfo="userInfo" @userInfoSave="userInfoSave" @resetform="resetform" title="完善信息" @closeUserInfo="closeUserInfo" :queryDialog="queryDialog"></verifi-cation>

提交按钮:userInfoSave这样的函数需要自己在页面中写,因为调用接口不一样所以区分开写成动态的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值