校验相同的代码,会发生冲突,因此使用v-if 不渲染div下的标签
vue部分代码
// 绑定activeName 存储 el-tab-pane 的name属性
<el-tabs type="card" v-model="activeName" @tab-click="handleClick" style="height: 200px;">
// name 属性会绑定到 el-tabs 的v-model 中 只能用数字,用其他会报错,被这里坑惨了
<el-tab-pane label="不限" name="0">
<div v-if="this.form.contact === '0'">
<el-form-item prop="phone" label="发布手机号 (必填)">
<el-input type="text" v-model="form.phone" clearable style="width: 225px;"></el-input>
</el-form-item>
<el-form-item prop="email" label="发布邮箱 (必填)">
<el-input type="text" v-model="form.email" clearable style="width: 225px;"></el-input>
</el-form-item>
</div>
</el-tab-pane>
<el-tab-pane label="手机号" name="1">
<div v-if="this.form.contact === '1'">
<el-form-item prop="phone" label="发布手机号 (必填)">
<el-input type="text" v-model="form.phone" clearable style="width: 225px;"></el-input>
</el-form-item>
</div>
</el-tab-pane>
<el-tab-pane label="邮箱" name="2">
<div v-if="this.form.contact === '2'">
<el-form-item prop="email" label="发布邮箱 (必填)">
<el-input type="text" v-model="form.email" clearable style="width: 225px;"></el-input>
</el-form-item>
</div>
</el-tab-pane>
</el-tabs>
export default {
data(){
return {
activeName: '0', // 对应el-tab-pane 的name
form {
contact: "0", // form表单
}
}
},
method {
handleClick(tab,event) {
// 把值传到表单
this.form.contact = tab.name
}
}
}
步骤:
1、activeName定位在第一个标签,然后使用contact 让第一个标签下的dom显示出来
2、 通过点击el-tab-pane 把name传到上一级el-tabs,el-tabs 标签通过tab-click=handleClick 事件,把name赋值给 this.form.contact
3、 然后再通过if语句展示对应div 下的数据
效果图