為何捐款
API 瀏覽器
分頁

分頁是一種使用較少視窗實際空間來顯示更多資訊的方式。此頁面描述透過 QTabs、QTab 和 QRouteTab 的分頁選取部分。

此元件的一個常見用例是在 Layout 的標頭/頁尾中。請參閱版面配置標頭與頁尾以取得參考。

提示

QTabPanels搭配使用效果極佳,QTabPanels 是一個嚴格參照面板(分頁內容)本身的元件。

正在載入 QTabs API...
正在載入 QTab API...
正在載入 QRouteTab API...

用法

提示

  • 當寬度大於容器寬度時,QTabs 可以水平捲動。調整您的瀏覽器以查看實際效果。
  • 在桌面上,您會看到兩側都有可以點擊的箭頭符號。
  • 在手機上,您可以用手指平移分頁。
  • 如果您想要強制箭頭在手機上可見,請使用 mobile-arrows 屬性。

警告

如果您沒有同時安裝 Vue Router,QRouteTab 將無法與 UMD 版本一起運作。

基本

基本



外部、內部和手機箭頭上可見

外部、內部和手機箭頭上可見



垂直

垂直(QSplitter 範例)



密集

密集



個別色彩

個別色彩



漣漪

無漣漪和自訂漣漪色彩



自訂指示器

在以下範例中,請注意最後兩個 QTabs:頂部指示器和無指示器。

自訂指示器



分頁通知

有多種方式可以顯示分頁通知:使用 QBadge、透過警示點或警示圖示(可以是任何圖示)。

分頁通知



對齊

QTabs 是響應式的,並且當容器寬度(非視窗寬度)大於設定的斷點時,align 屬性(請參閱下方)會變為活動狀態。為了示範目的,以下分頁已停用斷點。

對齊



在以下範例中的第二個 QTabs 中,如果視窗寬度小於 1024px,則「電影」和「照片」分頁將被「更多...」下拉式選單取代。

使用下拉式選單

使用下拉式選單



在 QToolbar 上

請注意,我們需要指定 shrink 屬性。預設情況下,QTabs 會嘗試擴展到所有可用的水平空間,但在這種情況下,我們將其用作 QToolbar 的子項,因此我們不希望這樣。

QToolbar 中的分頁



動態更新

動態分頁



與 QTabsPanel 一起使用

提示

QTabPanels 也可以單獨使用。它們不依賴 QTabs 的存在。此外,它們可以放置在頁面內的任何位置,而不僅僅是在 QTabs 附近。

具有分頁面板的分頁



更多資訊:分頁面板

連接到 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>

警告

當將 QTabs 與 QRouteTab 一起使用時,不建議也使用 v-model(儘管您仍然可以),因為目前活動分頁的真值來源是由目前的路由而不是 v-model 決定的。每個 QRouteTab 都會根據您應用程式的路由而不是 v-model 而變為「活動」。因此,v-model 的初始值或直接變更 v-model 也將不會變更您應用程式的路由。

將 QRouteTab 與目前路由比對
已為 v2.9+ 更新

  • 如果設定為 exact 比對
    1. 它指向的路由必須被 Vue Router 視為「exact-active」(完全符合路由,忽略雜湊 & 查詢)。
    2. 假設 Vue Router 處於歷史模式,它必須符合設定的路由雜湊(如果有的話)
    3. 它必須符合設定的路由查詢(如果有的話)- 目前路由查詢中的任何額外查詢參數都不會使分頁變為活動狀態(如果您想要這樣做,請勿使用 exact
  • 否則,如果未設定為 exact 比對
    1. 它指向的路由必須被 Vue Router 視為「active」(寬鬆符合路由,忽略雜湊 & 查詢)。
    2. 假設 Vue Router 處於歷史模式,是否使用雜湊設定?如果是,則必須完全符合。
    3. 是否使用查詢設定?如果是,則設定的查詢必須包含在目前的路由查詢中。
    4. 如果多個 QRouteTab 仍然符合目前的路由(例如:路由為 /cars/brands/tesla,而我們有指向非精確 /cars、非精確 /cars/brands、非精確 /cars/brands/tesla 的 QRouteTabs),則最符合目前路由的特定路由獲勝(在本例中為 /cars/brands/tesla)
    5. 如果仍然有多個 QRouteTabs 符合上述條件,則查詢最接近目前路由查詢的 QRouteTab 獲勝(具有設定的查詢,且目前路由查詢的額外參數最少)。
    6. 如果仍然有多個 QRouteTabs 符合上述條件,則產生的 href 長度較長的 QRouteTab 獲勝。

exact 設定的 QRouteTabs 始終勝過寬鬆比對(非精確)的 QRouteTabs。

處理自訂導航
已為 v2.9+ 更新

提示

請參閱頁面頂部的 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>