插槽是 Vue 中的一種強大機制,它使元件能夠定義可由父元件自訂的內容區域。這提高了建置 UI 元件的可重複使用性和靈活性。 Vue 3 提供兩種主要插槽類型:
在 Vue 3 中,槽可讓您透過提供將內容傳遞到子元件的方式來建立靈活的元件。 Composition 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 #header> <h1>Header Content</h1> </template> <p>Main Content goes here!</p> <template #footer> <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 #default="{ message }"> <p>{{ message }}</p> </template> </MessageComponent>
讓我們使用 Vue 3 以及 Composition API 和 slot 建立一個簡單的食品配送應用程式。此範例將展示一個主要的 FoodDelivery 元件,該元件使用插槽來顯示食品清單以及頁首和頁尾。
這是 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>
接下來,讓我們建立一個簡單的 FoodItem 元件來代表各個食品。
<template> <div class="food-item"> <h3>{{ name }}</h3> <p>Price: ${{ price.toFixed(2) }}</p> <button @click="addToCart">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>
現在,讓我們將所有內容放在使用 FoodDelivery 和 FoodItem 元件的父元件中。
FoodDelivery 組件:該組件可作為我們的食品配送服務的佈局。它接受三個槽:標題、食品的預設槽和頁腳。
FoodItem 組件:這代表單一食品。它以名稱和價格作為道具,並具有模擬將商品添加到購物車的方法。
<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>
現在,讓我們建立一個使用 ItemList 元件的父元件,並提供一個自訂模板,用於使用作用域插槽渲染每個項目。
<template> <div> <slot></slot> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ name: 'MyComponent', }); </script>
此範例示範如何在 Vue 3 中有效地使用作用域槽來建立靈活且可重複使用的元件結構。父元件可以自訂每個項目的渲染,同時仍存取子元件提供的資料。
此範例說明如何利用 Vue 3 應用程式中的槽來建立靈活的食品配送組件系統。您可以輕鬆自訂頁首、頁尾和內容,而無需修改主要元件。如果您還有任何其他問題或需要更多詳細信息,請隨時在評論中提問。
透過使用 Composition API 有效利用 Vue 3 中的普通槽和範圍槽,您可以建立高度可重複使用且可自訂的 UI 元件,從而提高 Vue 應用程式中的可維護性和程式碼組織。您可以根據您的特定內容注入和動態渲染需求選擇合適的槽類型。
成長的方式就是連結。
快樂編碼!
以上是了解 Vue 組合 API 中的插槽的詳細內容。更多資訊請關注PHP中文網其他相關文章!