<el-tabs动态v-model
时间: 2024-06-16 14:08:47 浏览: 14
<el-tabs> 是 Element UI 中的一个组件,用于创建标签页。动态 v-model 是指可以通过改变 v-model 的值来动态切换标签页。
在使用 <el-tabs> 组件时,可以通过 v-model 绑定一个变量来实现动态切换标签页。当 v-model 的值改变时,<el-tabs> 会自动切换到对应的标签页。
以下是使用 <el-tabs> 动态切换标签页的示例代码:
```html
<template>
<div>
<el-tabs v-model="activeTab">
<el-tab-pane label="标签页1" name="tab1">内容1</el-tab-pane>
<el-tab-pane label="标签页2" name="tab2">内容2</el-tab-pane>
<el-tab-pane label="标签页3" name="tab3">内容3</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
export default {
data() {
return {
activeTab: 'tab1' // 初始选中的标签页
};
}
};
</script>
```
在上述代码中,通过 v-model 绑定了一个名为 activeTab 的变量,初始值为 'tab1'。当 activeTab 的值改变时,<el-tabs> 会自动切换到对应的标签页。
相关问题
<el-tabs v-if="orderInvoiceData.length" class='invoice_list' v-model="currentOrderTab" @tab-click="clickOrderTab"> <el-tab-pane :label="numToStr(order.order_info.order_no)" :name="numToStr(order.order_info.order_no)" :key="order.order_info.order_no" v-for="order in orderInvoiceData"> <el-tabs v-if="!order.order_info.is_error" tab-position="left" style="height:calc(100% - 96px);" v-model="currentInvoiceTab"> <el-tab-pane :label="invoice.invoice_info.label" :key="invoice.invoice_info.label" :name="invoice.invoice_info.name" v-for='(invoice, index) in order.invoiceList'> </el-tab-pane> </el-tabs> </el-tab-pane> </el-tabs> 如何点击第一个el-tabs时,触发第二个el-tabs
可以通过在第一个 `el-tabs` 的 `tab-click` 事件中,根据当前选中的订单信息来动态修改第二个 `el-tabs` 的 `v-model` 值,从而触发选中对应的标签页。具体实现代码如下:
```vue
<el-tabs v-if="orderInvoiceData.length" class='invoice_list' v-model="currentOrderTab" @tab-click="clickOrderTab">
<el-tab-pane :label="numToStr(order.order_info.order_no)" :name="numToStr(order.order_info.order_no)"
:key="order.order_info.order_no" v-for="order in orderInvoiceData">
<el-tabs v-if="!order.order_info.is_error" tab-position="left" style="height:calc(100% - 96px);"
v-model="currentInvoiceTab[index]">
<el-tab-pane :label="invoice.invoice_info.label" :key="invoice.invoice_info.label"
:name="invoice.invoice_info.name" v-for='(invoice, index) in order.invoiceList'>
</el-tab-pane>
</el-tabs>
</el-tab-pane>
</el-tabs>
```
```javascript
data() {
return {
currentOrderTab: '', // 第一个 el-tabs 的 v-model
currentInvoiceTab: [] // 第二个 el-tabs 的 v-model 数组,每个元素对应一个订单的标签页选中状态
}
},
methods: {
clickOrderTab(tab) {
// 获取当前选中的订单信息
const order = this.orderInvoiceData.find(item => item.order_info.order_no === Number(tab.name));
if (order && !order.order_info.is_error) {
// 根据当前订单信息修改第二个 el-tabs 的选中状态
this.currentInvoiceTab.splice(this.orderInvoiceData.indexOf(order), 1, order.invoiceList[0].invoice_info.name);
}
}
}
```
这段代码中,我们在 `data` 中新增了一个数组 `currentInvoiceTab`,用来存储每个订单对应的第二个 `el-tabs` 的选中状态。然后在点击第一个 `el-tabs` 的 `tab-click` 事件中,将当前选中的订单信息找出来,根据订单信息修改相应的 `currentInvoiceTab` 的元素值,从而触发第二个 `el-tabs` 的选中状态改变,达到自动切换到对应的标签页的效果。
简写以下代码<el-tabs v-model="activeTab"> <el-tab-pane label="全部" name="first"> <div slot="label" @click="backright" style="width: 70px; text-align: center">全部</div> </el-tab-pane> <el-tab-pane label="本月" name="second"> <div slot="label" @click="backright" style="width: 70px; text-align: center">本月</div> </el-tab-pane> <el-tab-pane label="本学期" name="third"> <div slot="label" @click="backright" style="width: 70px; text-align: center">本学期</div> </el-tab-pane> <el-tab-pane label="自定义" name="fourth"> <div slot="label" @click="toggleLeft" style="width: 70px; text-align: center">自定义</div> </el-tab-pane></el-tabs>
以下是简写后的代码:
```
<el-tabs v-model="activeTab">
<el-tab-pane label="全部" name="first" @click="backright">全部</el-tab-pane>
<el-tab-pane label="本月" name="second" @click="backright">本月</el-tab-pane>
<el-tab-pane label="本学期" name="third" @click="backright">本学期</el-tab-pane>
<el-tab-pane label="自定义" name="fourth" @click="toggleLeft">自定义</el-tab-pane>
</el-tabs>
```
针对简写的细节说明:
1. 将 `click` 事件监听器移动到 `el-tab-pane` 标签上,使代码更加简洁。
2. 将 `div` 标签删除,将标签页的文本直接写在 `el-tab-pane` 标签中,使代码更加简洁易读。
3. 将 `style` 样式移动到 `style` 标签或者外部 CSS 文件中,使得代码更加简洁易维护。