首先创建一个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这样的函数需要自己在页面中写,因为调用接口不一样所以区分开写成动态的。
