选项面板
选项卡面板是一种使用较少的窗口显示更多信息的方法。
TIP
可以很好的与 QTabs 组件配合使用,但不是必须的。
QTabPanels API
QTabPanel API
用法
TIP
- 可以很好的与 QTabs 组件配合使用,QTabs 提供了一种很棒的方法来选择展示哪个面板。
- 如果 QTabpanel 的内容包括图像,而且您还希望使用滑动操作去导航,那么您需要为其添加
draggable="false"
否则浏览器的原生行为可能会导致负面影响。
重要
不要被 “QTabPanels” 的名称带偏了,QTabPanels 和 QTabs 不是绑定的,他们都可以独立使用。
Keep Alive
- 请注意 QTabPanels 中 Boolean 类型的
keep-alive
属性,如果您需要这个特性,不要使用 Vue 原生的<keep-alive>
组件包裹 QTabPanel。 - 如果您需要使用
keep-alive-include
或keep-alive-exclude
属性,那么 QTabPanel 的name
属性必须是一个合法的 vue 组件名(没有空格,且不以数字开头)。
基础
<template>
<div class="q-pa-md">
<div class="q-gutter-y-md" style="max-width: 350px">
<q-option-group
v-model="panel"
inline
:options="[
{ label: 'Mails', value: 'mails' },
{ label: 'Alarms', value: 'alarms' },
{ label: 'Movies', value: 'movies' }
]"
/>
<q-tab-panels v-model="panel" animated class="shadow-2 rounded-borders">
<q-tab-panel name="mails">
<div class="text-h6">Mails</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="alarms">
<div class="text-h6">Alarms</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h6">Movies</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
</q-tab-panels>
</div>
</div>
</template>
搭配 QTabs
TIP
QTabPanels 可以独立使用,他们不互相依赖,他们也可以放在页面的任何地方,不局限于 QTabs 附近。
<template>
<div class="q-pa-md">
<div class="q-gutter-y-md" style="max-width: 600px">
<q-card>
<q-tabs
v-model="tab"
dense
class="text-grey"
active-color="primary"
indicator-color="primary"
align="justify"
narrow-indicator
>
<q-tab name="mails" label="Mails" />
<q-tab name="alarms" label="Alarms" />
<q-tab name="movies" label="Movies" />
</q-tabs>
<q-separator />
<q-tab-panels v-model="tab" animated>
<q-tab-panel name="mails">
<div class="text-h6">Mails</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="alarms">
<div class="text-h6">Alarms</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h6">Movies</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
</q-tab-panels>
</q-card>
<q-card>
<q-tab-panels v-model="tab" animated>
<q-tab-panel name="mails">
<div class="text-h6">Mails</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="alarms">
<div class="text-h6">Alarms</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h6">Movies</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
</q-tab-panels>
<q-separator />
<q-tabs
v-model="tab"
dense
class="bg-grey-3"
align="justify"
narrow-indicator
>
<q-tab name="mails" label="Mails" />
<q-tab name="alarms" label="Alarms" />
<q-tab name="movies" label="Movies" />
</q-tabs>
</q-card>
</div>
</div>
</template>
<template>
<div class="q-pa-md" style="max-width: 600px">
<q-card>
<q-tabs
v-model="tab"
dense
class="text-grey"
active-color="primary"
indicator-color="primary"
align="justify"
>
<q-tab name="mails" label="Mails" />
<q-tab name="alarms" label="Alarms" />
<q-tab name="movies" label="Movies" />
</q-tabs>
<q-separator />
<q-tab-panels v-model="tab" animated>
<q-tab-panel name="mails" class="q-pa-none">
<q-splitter
v-model="splitterModel"
style="height: 250px"
>
<template v-slot:before>
<q-tabs
v-model="innerTab"
vertical
class="text-teal"
>
<q-tab name="innerMails" icon="mail" label="Mails" />
<q-tab name="innerAlarms" icon="alarm" label="Alarms" />
<q-tab name="innerMovies" icon="movie" label="Movies" />
</q-tabs>
</template>
<template v-slot:after>
<q-tab-panels
v-model="innerTab"
animated
transition-prev="slide-down"
transition-next="slide-up"
>
<q-tab-panel name="innerMails">
<div class="text-h4 q-mb-md">Mails</div>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
</q-tab-panel>
<q-tab-panel name="innerAlarms">
<div class="text-h4 q-mb-md">Alarms</div>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
</q-tab-panel>
<q-tab-panel name="innerMovies">
<div class="text-h4 q-mb-md">Movies</div>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
</q-tab-panel>
</q-tab-panels>
</template>
</q-splitter>
</q-tab-panel>
<q-tab-panel name="alarms">
<div class="text-h6">Alarms</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h6">Movies</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
</q-tab-panels>
</q-card>
</div>
</template>
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.
颜色
<template>
<div class="q-pa-md">
<div class="q-gutter-y-md" style="max-width: 600px">
<q-card>
<q-tabs
v-model="tab"
dense
class="bg-grey-3 text-grey-7"
active-color="primary"
indicator-color="purple"
align="justify"
>
<q-tab name="mails" label="Mails" />
<q-tab name="alarms" label="Alarms" />
<q-tab name="movies" label="Movies" />
</q-tabs>
<q-tab-panels v-model="tab" animated class="bg-primary text-white">
<q-tab-panel name="mails">
<div class="text-h6">Mails</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="alarms">
<div class="text-h6">Alarms</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h6">Movies</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
</q-tab-panels>
</q-card>
<q-card>
<q-tabs
v-model="tab"
class="bg-purple text-white"
align="justify"
narrow-indicator
>
<q-tab name="mails" label="Mails" />
<q-tab name="alarms" label="Alarms" />
<q-tab name="movies" label="Movies" />
</q-tabs>
<q-separator />
<q-tab-panels v-model="tab" animated class="bg-purple-1 text-center">
<q-tab-panel name="mails">
<div class="text-h6">Mails</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="alarms" class="bg-purple-2">
<div class="text-h6">Alarms</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h6">Movies</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
</q-tab-panels>
</q-card>
</div>
</div>
</template>
使用垂直的 QTabs 和 QSplitter
<template>
<div>
<q-splitter
v-model="splitterModel"
style="height: 250px"
>
<template v-slot:before>
<q-tabs
v-model="tab"
vertical
class="text-teal"
>
<q-tab name="mails" icon="mail" label="Mails" />
<q-tab name="alarms" icon="alarm" label="Alarms" />
<q-tab name="movies" icon="movie" label="Movies" />
</q-tabs>
</template>
<template v-slot:after>
<q-tab-panels
v-model="tab"
animated
swipeable
vertical
transition-prev="jump-up"
transition-next="jump-up"
>
<q-tab-panel name="mails">
<div class="text-h4 q-mb-md">Mails</div>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
</q-tab-panel>
<q-tab-panel name="alarms">
<div class="text-h4 q-mb-md">Alarms</div>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h4 q-mb-md">Movies</div>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.</p>
</q-tab-panel>
</q-tab-panels>
</template>
</q-splitter>
</div>
</template>
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.
自定义过渡效果
关于完整的 transitions 列表,请 参考 过渡效果 页面。
<template>
<div class="q-pa-md">
<div style="max-width: 600px">
<q-tabs
v-model="tab"
align="justify"
narrow-indicator
class="q-mb-lg"
>
<q-tab class="text-purple" name="mails" label="Mails" />
<q-tab class="text-orange" name="alarms" label="Alarms" />
<q-tab class="text-teal" name="movies" label="Movies" />
</q-tabs>
<div class="q-gutter-y-sm">
<q-tab-panels
v-model="tab"
animated
transition-prev="scale"
transition-next="scale"
class="bg-purple text-white text-center"
>
<q-tab-panel name="mails">
<div class="text-h6">Mails</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="alarms">
<div class="text-h6">Alarms</div>
Ad molestiae non facere animi nobis, similique nemo velit reiciendis corporis impedit nam in.
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h6">Movies</div>
Nostrum necessitatibus expedita dolores? Voluptatem repudiandae magni ea.
</q-tab-panel>
</q-tab-panels>
<q-tab-panels
v-model="tab"
animated
transition-prev="fade"
transition-next="fade"
class="bg-orange text-white text-center"
>
<q-tab-panel name="mails">
<div class="text-h6">Mails</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="alarms">
<div class="text-h6">Alarms</div>
Ad molestiae non facere animi nobis, similique nemo velit reiciendis corporis impedit nam in.
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h6">Movies</div>
Nostrum necessitatibus expedita dolores? Voluptatem repudiandae magni ea.
</q-tab-panel>
</q-tab-panels>
<q-tab-panels
v-model="tab"
animated
transition-prev="jump-up"
transition-next="jump-down"
class="bg-teal text-white text-center"
>
<q-tab-panel name="mails">
<div class="text-h6">Mails</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="alarms">
<div class="text-h6">Alarms</div>
Ad molestiae non facere animi nobis, similique nemo velit reiciendis corporis impedit nam in.
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h6">Movies</div>
Nostrum necessitatibus expedita dolores? Voluptatem repudiandae magni ea.
</q-tab-panel>
</q-tab-panels>
</div>
</div>
</div>
</template>
可无限滑动的
在下面的示例中,使用您的鼠标来滑动面板,如果是在一个可触屏的设备上,请滑动您的手指。
<template>
<div class="q-pa-md" style="max-width: 350px">
<q-tab-panels
v-model="panel"
animated
swipeable
infinite
class="bg-purple text-white shadow-2 rounded-borders"
>
<q-tab-panel name="mails">
<div class="text-h6">Mails</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="alarms">
<div class="text-h6">Alarms</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h6">Movies</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
</q-tab-panels>
</div>
</template>
可无限垂直滑动的
<template>
<div class="q-pa-md" style="max-width: 350px">
<q-tab-panels
v-model="panel"
animated
swipeable
vertical
infinite
class="bg-purple text-white shadow-2 rounded-borders"
>
<q-tab-panel name="mails">
<div class="text-h6">Mails</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="alarms">
<div class="text-h6">Alarms</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
<q-tab-panel name="movies">
<div class="text-h6">Movies</div>
Lorem ipsum dolor sit amet consectetur adipisicing elit.
</q-tab-panel>
</q-tab-panels>
</div>
</template>