插槽是 Vue 中的一種強大機制,它使元件能夠定義可由父元件自訂的內容區域。這提高了建置 UI 元件的可重複使用性和靈活性。 Vue 3 提供兩種主要插槽類型:
- Normal Slots:提供一個簡單的方法將父元件的內容注入到子元件的模板中。
- 範圍插槽:透過將資料(範圍)從子元件傳遞到插槽內容,允許進行更高級的自訂,從而實現基於父資料和子資料的動態渲染。
在 Vue 3 中,槽可讓您透過提供將內容傳遞到子元件的方式來建立靈活的元件。 Composition API 增強了我們使用插槽的方式,使其更加直覺和強大。
什麼是老虎機?
插槽是一種在元件中定義佔位符內容的方法,在使用元件時可以用自訂內容填入該佔位符內容。它們有助於創建可重複使用和可自訂的元件。
老虎機類型
- 預設插槽:最常見的類型,它允許您傳遞沒有任何特定名稱的內容。
- 命名插槽:允許您使用唯一的名稱指定不同的插槽,從而實現更複雜的佈局。
- 作用域插槽:它們提供了一種使用插槽將資料從子元件公開到父元件的方法。 透過 Composition API 使用槽
將插槽與組合 API 一起使用
以下是如何使用 Composition API 在 Vue 3 元件中定義和使用槽:
預設插槽範例
<template> <div> <slot></slot> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ name: 'MyComponent', }); </script>
用法:
<mycomponent> <p>This is some content passed to the default slot!</p> </mycomponent>
命名插槽
<template> <div> <slot name="header"></slot> <slot></slot> <slot name="footer"></slot> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ name: 'LayoutComponent', }); </script>
用法:
<layoutcomponent> <template> <h1 id="Header-Content">Header Content</h1> </template> <p>Main Content goes here!</p> <template> <footer>Footer Content</footer> </template> </layoutcomponent>
範圍插槽
作用域插槽可讓您將資料從子元件傳遞回父元件。
<template> <div> <slot :message="message"></slot> </div> </template> <script> import { defineComponent, ref } from 'vue'; export default defineComponent({ name: 'MessageComponent', setup() { const message = ref("Hello from the child!"); return { message }; }, }); </script>
用法:
<messagecomponent> <template message> <p>{{ message }}</p> </template> </messagecomponent>
範例:Vue 3 中帶有插槽的食品交付
讓我們使用 Vue 3 以及 Composition API 和 slot 建立一個簡單的食品配送應用程式。此範例將展示一個主要的 FoodDelivery 元件,該元件使用插槽來顯示食品清單以及頁首和頁尾。
第 1 步:建立主要元件
這是 FoodDelivery 組件,它接受頁首、食物項目和頁腳的命名槽。
<template> <div class="food-delivery"> <slot name="header"></slot> <div class="food-items"> <slot></slot> </div> <slot name="footer"></slot> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ name: 'FoodDelivery', }); </script> <style> .food-delivery { border: 1px solid #ccc; padding: 20px; border-radius: 8px; } .food-items { margin: 20px 0; } </style>
第 2 步:創建食品組件
接下來,讓我們建立一個簡單的 FoodItem 元件來代表各個食品。
<template> <div class="food-item"> <h3 id="name">{{ name }}</h3> <p>Price: ${{ price.toFixed(2) }}</p> <button>Add to Cart</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ name: 'FoodItem', props: { name: { type: String, required: true, }, price: { type: Number, required: true, }, }, methods: { addToCart() { // Logic to add the item to the cart console.log(`${this.name} added to cart!`); }, }, }); </script> <style> .food-item { border: 1px solid #eee; padding: 10px; margin-bottom: 10px; border-radius: 5px; } </style>
第 3 步:使用組件
現在,讓我們將所有內容放在使用 FoodDelivery 和 FoodItem 元件的父元件中。
讓我解釋一下
FoodDelivery 組件:該組件可作為我們的食品配送服務的佈局。它接受三個槽:標題、食品的預設槽和頁腳。
FoodItem 組件:這代表單一食品。它以名稱和價格作為道具,並具有模擬將商品添加到購物車的方法。
- 應用程式元件:這是將所有內容聚集在一起的父元件。它使用 FoodDelivery 元件,並用歡迎訊息、FoodItem 元件清單和感謝訊息填充插槽。
使用案例
- 自訂清單:作用域插槽非常適合建立清單元件,其中每個項目都可以根據其屬性具有不同的渲染邏輯。子元件可以將專案資料傳遞到插槽,父元件可以使用作用域插槽為每個專案定義範本。 (BasePaginated.vue)
- 條件渲染: 作用域插槽可以根據子元件提供給插槽的資料進行選擇性渲染。例如,您可以有條件地在槽內容中顯示訊息或錯誤狀態。
- 複雜佈局:作用域插槽有助於創建更複雜的佈局,其中佈局的不同部分可以由父組件自定義,同時允許子組件使用作用域注入特定內容或功能。
<template> <div> <slot></slot> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ name: 'MyComponent', }); </script>
<mycomponent> <p>This is some content passed to the default slot!</p> </mycomponent>
高級注意事項
- 命名作用域插槽:您可以為作用域插槽指派名稱(例如...),使您能夠在單一子元件中擁有多個作用域插槽,並在父元件中按名稱引用它們。
- 槽函數:在 Vue 2 中,槽在子元件中以 $slots 存取。 Vue 3 使用 $scopedSlots 提供了一種更具反應性的方法,這些函數提供對插槽內容的存取。這允許在子元件內進行動態槽操作和條件渲染。
讓我們增強作用域插槽範例,使其更清晰、更實用。此範例將示範如何使用作用域槽將專案資料從子元件傳遞到父元件,從而實現靈活的渲染。
第 1 步:建立 ItemList 元件
此元件將顯示項目列表,並使用作用域插槽來允許父級自訂每個項目的渲染方式。
<template> <div> <slot name="header"></slot> <slot></slot> <slot name="footer"></slot> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ name: 'LayoutComponent', }); </script>
步驟 2:將 ItemList 元件與作用域槽一起使用
現在,讓我們建立一個使用 ItemList 元件的父元件,並提供一個自訂模板,用於使用作用域插槽渲染每個項目。
<template> <div> <slot></slot> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ name: 'MyComponent', }); </script>
項目清單組件:
- 此元件定義了一個項目列表,並使用作用域槽將每個項目公開給父元件。
- 如果沒有提供槽位,則預設顯示項目的描述。 ###父元件:
- 該元件使用 ItemList 並提供用於渲染每個項目的自訂模板。
- 它透過作用域插槽存取項目數據,並包含一個單擊時會觸發功能的按鈕。
此範例示範如何在 Vue 3 中有效地使用作用域槽來建立靈活且可重複使用的元件結構。父元件可以自訂每個項目的渲染,同時仍存取子元件提供的資料。
讓我們回顧一下
此範例說明如何利用 Vue 3 應用程式中的槽來建立靈活的食品配送組件系統。您可以輕鬆自訂頁首、頁尾和內容,而無需修改主要元件。如果您還有任何其他問題或需要更多詳細信息,請隨時在評論中提問。
透過使用 Composition API 有效利用 Vue 3 中的普通槽和範圍槽,您可以建立高度可重複使用且可自訂的 UI 元件,從而提高 Vue 應用程式中的可維護性和程式碼組織。您可以根據您的特定內容注入和動態渲染需求選擇合適的槽類型。
成長的方式就是連結。
快樂編碼!
以上是了解 Vue 組合 API 中的插槽的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver CS6
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。