选项卡是一种使用较少的窗口空间显示更多信息的方法。 本页通过QTab、QTab和QRouteTab描述选项卡选择部分。
该组件的一种常见用例是在布局的页眉/页脚中。 请参考布局和页眉和页脚以获得参考。
TIP
与QTabPanels配合使用,这是一个严格指向面板(选项卡内容)本身的组件。
QTabs API
QTab API
QRouteTab API
用法
TIPS
- 当宽度大于容器宽度时,QTab可以水平滚动。 相应地调整您的浏览器以查看此操作。
- 在桌面上,你会看到两边有可以点击的V形符号。
- 在手机上,你可以用手指平移选项卡。
- 如果要强制箭头在手机上可见,请使用
mobile-arrows
属性。
WARNING
QRouteTab不会也不能与UMD版本一起使用,因为在那种环境下您没有Vue Router。
基础
外部、内部和手机可见箭头
垂直
稠密
个别颜色
波纹
自定义指示线
在下面的示例中,请注意最后两个QTab:顶部的指示线和没有指示线。
选项卡通知
有多种方式显示选项卡通知:使用QBadge、通过一个警报点或一个警报图标(可以是任何)
对齐
当容器宽度(而非窗口宽度)大于配置的断点时,QTab会做出响应,并且align
属性(请参见下文)变为活动状态。 为了进行演示,下面的选项卡禁用了断点。
在下面示例的第二个QTab中,如果窗口宽度小于1024px,则“Movies”和“Photos”标签将替换为“"More…”下拉菜单。
带下拉菜单
在QToolbar上
注意,我们需要指定shrink
属性。 默认情况下,QTabs尝试扩展到所有可用的水平空间,但是在这种情况下,我们将其用作QToolbar的子元素,因此我们不希望这样做。
动态更新
与QTabsPanel一起使用
TIP
QTabPanels也可以独立使用。 它们不依赖于QTab的存在。 而且,它们可以放置在页面中的任何位置,而不仅仅是QTabs附近。
更多信息: Tab Panels.
连接Vue Router
您可以通过QRouteTab组件将选项卡与Vue Router一起使用。 这个组件继承了QTab的所有东西,但是它也绑定了router-link
属性。 这些允许监听当前的应用路由,并在单击/点击时触发路由。
<q-tabs>
<q-route-tab
icon="mail"
to="/mails"
exact
/>
<q-route-tab
icon="alarm"
to="/alarms"
exact
/>
</q-tabs>
WARNING
当与QRouteTab一起使用QTabs时,不建议同时使用v-model(尽管你仍然可以),因为当前活动标签的真实来源是由当前路由而不是v-model决定的。每个QRouteTab变得"active"取决于你的应用程序的路由,而不是由于v-model。所以v-model的初始值或直接改变v-model不会同时改变你的应用程序的路由。
将QRouteTab与当前路由相匹配 uped for v2.9+
- 如果它被设置为精确(
exact
)匹配:- 它所指向的路由必须被Vue Router认为是"exact-active"的(完全匹配路由,不考虑哈希和查询)。
- 假设Vue Router处于历史模式,它必须与配置的路由哈希(如果有的话)匹配。
- 它必须与配置的路由查询(如果有的话)相匹配–当前路由查询中任何额外的查询参数都不会使标签激活(如果你想这样,不要使用
exact
)。
- 否则,如果它没有设置为精确(
exact
)匹配:- 它所指向的路由必须被Vue Router认为是"active"(松散地匹配路由,不考虑哈希和查询)。
- 假设Vue Router处于历史模式,它是否配置了一个哈希值?如果是的话,它必须完全匹配。
- 它是否配置了查询?如果是,那么配置的查询必须包括在当前路由查询中。
- 如果多个QRouteTab仍然匹配当前路由(例如:路由是/cars/brands/tesla,我们有QRouteTab指向非确切的/cars、非确切的/cars/brands、非确切的/cars/brands/tesla),那么匹配当前路由的最具体的一个获胜(在这种情况下是/cars/brands/tesla)
- 如果仍有多个QRouteTabs符合上述标准,那么具有最接近当前路由查询的QRouteTabs获胜(具有配置的查询,并且当前路由查询的额外参数数量最少)。
- 如果仍有多个QRouteTabs符合上述条件,那么具有所产生的href的那个长度较大的QRouteTabs获胜。
配置的"精确"QRouteTabs总是胜过松散匹配(非精确)的。
处理自定义导航 uped for v2.9+
TIP
请参考页面顶部的QRouteTab API卡,以获得对下面使用的@click
事件的更深入描述。
<template>
<q-tabs
no-caps
class="bg-orange text-white shadow-2"
>
<q-route-tab :to="{ query: { tab: '1' } }" exact replace label="Activate in 2s" @click="navDelay" />
<q-route-tab :to="{ query: { tab: '2' } }" exact replace label="Do nothing" @click="navCancel" />
<q-route-tab :to="{ query: { tab: '3' } }" exact replace label="Navigate to the second tab" @click="navRedirect" />
<q-route-tab :to="{ query: { tab: '4' } }" exact replace label="Navigate immediately" @click="navPass" />
</q-tabs>
</template>
<script>
export default {
setup () {
function navDelay (e, go) {
e.preventDefault() // we cancel the default navigation
// console.log('triggering navigation in 2s')
setTimeout(() => {
// console.log('navigating as promised 2s ago')
go()
}, 2000)
}
function navCancel (e) {
e.preventDefault() // we cancel the default navigation
}
function navRedirect (e, go) {
e.preventDefault() // we cancel the default navigation
// call this at your convenience
go({
to: { query: { tab: '2', noScroll: true } },
// replace: boolean; default is what the tab is configured with
// returnRouterError: boolean; default is false
})
.then(vueRouterResult => { /* ... */ })
.catch(vueRouterError => {
/* ...will not reach here unless returnRouterError === true */
})
}
function navPass () {}
return { navDelay, navCancel, navRedirect, navPass }
}
}
</script>