為何捐款
API 瀏覽器
選擇

QSelect 元件有兩種選擇類型:單選或多選。此元件會開啟一個選單,用於選擇列表和操作。篩選器也可用於較長的列表。

如果您正在尋找下拉「按鈕」而不是「輸入」,請改用 按鈕下拉選單

載入 QSelect API...

設計

概觀

警告

您的 QSelect 只能使用主要設計之一 (filledoutlinedstandoutborderless)。您不能使用多個,因為它們是互斥的。

設計概觀



裝飾器

裝飾器



色彩

色彩



可清除

作為輔助工具,您可以使用 clearable 屬性,讓使用者可以通過附加的圖示將模型重置為 null。以下範例中的第二個 QSelect 等同於使用 clearable

可清除



停用與唯讀

停用與唯讀



具有「submit」類型的 QBtn 插槽

警告

當在 QField、QInput 或 QSelect 的「before」、「after」、「prepend」或「append」插槽之一中放置類型為「submit」的 QBtn 時,您也應該在相關的 QBtn 上新增一個 @click 監聽器。此監聽器應呼叫提交表單的方法。此類插槽中的所有「click」事件都不會傳播到其父元素。

警告

請注意,當使用 options-cover 屬性時,轉場效果不起作用。

以下範例展示了一些轉場效果。如需完整的可用轉場效果列表,請前往 轉場效果

選單轉場效果



選項列表顯示模式

預設情況下,QSelect 在桌面上將選項列表顯示為選單,在行動裝置上則顯示為對話框。您可以使用 behavior 屬性強制執行一種行為。

警告

請注意,在 iOS 上,選單行為可能會產生問題,尤其是在與 use-input 屬性結合使用時。您可以使用條件式 behavior 屬性,例如 :behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'",僅在 iOS 上使用對話框模式。

在選單中顯示選項



在對話框中顯示選項



模型

警告

單選的模型可以是任何類型 (字串、物件,…),而多選的模型必須是陣列。

單選 vs 多選



多選、計數器和最大值



模型內容可能會受到 emit-value 屬性的影響,您將在下方的「選項」章節中學習到。

選項

選項類型

字串選項



物件選項



影響模型

當使用 emit-value 時,模型會變成指定所選選項的已確定 value。預設為發射整個選項。僅當選項為物件形式時,使用它才有意義。

發射值



當使用 map-options 時,模型可以僅包含 value,並且它將根據選項進行映射以確定其標籤。這會涉及效能損失,因此僅在絕對必要時才使用它。例如,如果模型包含整個物件 (因此包含標籤屬性),則不需要它。

映射選項



自訂屬性名稱

預設情況下,QSelect 會查看選項陣列物件中每個選項的 labelvaluedisablesanitize 屬性。但您可以覆寫這些屬性

警告

如果您使用函數來自訂屬性,請務必檢查選項是否為 null。這些函數既用於列表中的選項,也用於選定的選項。

自訂標籤、值和停用屬性



自訂選單選項

警告

選項列表是使用虛擬滾動渲染的,因此如果您為一個選項渲染多個元素,則必須在除第一個元素之外的所有元素上設定 q-virtual-scroll--with-prev 類別。

選項插槽



這是另一個範例,我們在每個選項中新增了一個 QToggle。可能性是無限的。

物件選項



預設情況下,當沒有選項時,選單不會出現。但是您可以自訂此情境並指定選單應顯示的內容。

無選項插槽



延遲載入

以下範例簡要說明了如何使用選項的延遲載入。這表示,以及許多其他事項,首次渲染時不需要 options 屬性。

延遲載入選項



當滾動條到達底部時,您可以動態載入新選項

動態載入選項



覆蓋模式

選單覆蓋元件



停用 TAB 選擇

停用 Tab 選擇



顯示值

自訂顯示值



將 Chips 作為顯示值



選定項目插槽



篩選與自動完成

具有「use-input」的原生屬性

所有在 QSelect 上設定但不在 API 屬性列表中的屬性,都會被傳遞到用於過濾/自動完成/新增值的原生 input 欄位 (請先查看 use-input 屬性描述以了解其作用)。一些範例:autocomplete、placeholder。

更多資訊:原生 input 屬性

過濾選項



基本過濾



過濾兩個以上字元



文字自動完成



延遲過濾



過濾後選擇選項



建立新值

提示

以下僅是一些範例,引導您開始建立自己的 QSelect 行為。這並非 QSelect 提供的所有可能性的詳盡列表。

將此功能與 use-input 屬性一起使用是有意義的。

為了啟用建立新值的功能,您需要指定 new-value-mode 屬性和/或監聽 @new-value 事件。如果您同時使用兩者,那麼監聽 @new-value 的目的僅在於在您的自訂情境中覆蓋 new-value-mode

new-value-mode 屬性

new-value-mode 屬性值指定了值的添加方式:add (添加值,即使重複),add-unique (僅在不重複時添加) 或 toggle (如果值尚未在模型中則添加,否則移除它)。

通過使用此屬性,您不需要同時監聽 @new-value 事件,除非您有一些特定的情境需要覆蓋此行為。

新值模式



@new-value 事件

@new-value 事件在發射時會帶有要添加的值和一個 done 回調函數。done 回調函數有兩個可選參數

  • 要添加的值
  • 行為 (與 new-value-mode 屬性的值相同,並且當指定時,它會覆蓋該屬性 - 如果有使用) - 預設行為 (如果沒有使用 new-value-mode) 是添加值,即使它會是重複的。

調用不帶參數的 done() 只會清空輸入框的值,而不會以任何方式修改模型。

監聽 @new-value



僅添加唯一值



使用選單和過濾

過濾並將新值添加到選單

過濾並添加到選單



過濾新值 (在以下範例中,要添加的值需要至少 3 個字元才能通過),並且不添加到選單

過濾但不添加到選單



從輸入產生多個值

產生多個值



清理

預設情況下,所有選項 (包括選定的選項) 都會被清理。這表示以 HTML 格式顯示它們的功能被禁用。但是,如果您需要在選項中使用 HTML 並且信任其內容,則有幾種方法可以做到這一點。

您可以通過以下方式強制選單選項使用 HTML 格式

  • 將受信任選項的 html 鍵設定為 true (針對特定的受信任選項)
  • 或通過設定 QSelect 的 options-html 屬性 (針對所有選項)

如果符合以下條件,QSelect 的顯示值將以 HTML 格式顯示

  • 設定了 QSelect 的 display-value-html 屬性
  • 或者您沒有使用 display-value 並且
    • 設定了 QSelect 的 options-html 屬性
    • 任何選定的選項的 html 鍵設定為 true

警告

如果您使用 selectedselected-item 插槽,則您有責任清理顯示值。display-value-html 屬性將不適用。

HTML 格式的選項



HTML 格式的顯示值



渲染效能

渲染效能會受到選項數量的太大影響,除非在大型資料集上使用 map-options。請注意,無限滾動功能會在使用者滾動列表時渲染額外的選項。

提示

  • (Composition API) 為了在使用大量選項時獲得最佳效能,請勿使用 ref()/computed()/reactive()/等包裹您傳遞到 options 屬性中的陣列。這允許 Vue 跳過使列表對變更做出「響應」。
  • (Options API) 為了在使用大量選項時獲得最佳效能,請使用 Object.freeze(items) 凍結您傳遞到 options 屬性中的陣列。這允許 Vue 跳過使列表對變更做出「響應」。
十萬個選項



鍵盤導航

當 QSelect 獲得焦點時

  • 按下 ENTERARROW DOWN (或 SPACE,如果未設定 use-input) 將會打開選項列表
  • 如果設定了 use-chips
    • 按下 SHIFT + TAB 將會在 QChips 中向後導航 (如果已選取 QChip,則 TAB 將會在 QChips 中向前導航)
    • 當選取 QChip 時按下 ENTER 將會從選取中移除該選項
    • 按下 BACKSPACE 將會從選取中移除最後一個選項 (當設定 use-input 時,輸入框應為空)
  • 當設定 clearable 時按下 BACKSPACE
    • 它會清除單選的模型 (使用 null 值)
    • 它會移除多選的最後添加的值
  • 按下 TAB (或 SHIFT + TAB,如果未設定 use-chips 或已選取第一個 QChip) 將會導航到頁面上下一個或上一個可獲得焦點的元素
  • 如果未設定 use-input,則輸入文字 (0 - 9A - Z) 將會
    • 建立一個搜尋緩衝區 (如果 1.5 秒內沒有輸入新按鍵,則會重置),該緩衝區將用於在選項標籤中搜尋
    • 如果緩衝區中的第一個按鍵被多次輸入,則選取下一個以該字母開頭的選項 (在目前焦點選項之後)
    • 選取下一個 (從目前焦點選項開始) 與輸入文字匹配的選項 (匹配是模糊的 - 選項標籤應以第一個字母開頭並包含所有字母)

當選項列表打開時

  • 按下 ARROW UPARROW DOWN 將會在選項列表中向上或向下導航
  • 按下 PAGE UPPAGE DOWN 將會在選項列表中向上或向下翻頁
  • 按下 HOMEEND 將會導航到選項列表的開頭或結尾 (僅當您未使用 use-input,或輸入框為空時)
  • 當使用方向鍵導航時,導航將在到達列表的開頭或結尾時循環
  • 當在列表中選取選項時,按下 ENTER (或 SPACE,當未設定 use-input 時,或 TAB,當未設定 multipledisable-tab-selection 時) 將會
    • 如果未設定 multipledisable-tab-selection,則選取選項並關閉選項列表
    • 如果設定了 multiple,則切換選項

原生表單提交

當處理具有 actionmethod 的原生表單時 (例如,當將 Quasar 與 ASP.NET 控制器一起使用時),您需要在 QSelect 上指定 name 屬性,否則 formData 將不會包含它 (如果應該包含) - 所有值都會轉換為字串 (原生行為,因此請勿使用 Object 值)

原生表單