2023 Vue直播班筆記 - Slot Props 進階應用

更新於 發佈於 閱讀時間約 5 分鐘
文章以個人清楚理解方式記錄

前言

我們都知道組件就好比一個容器,而容器內的物品我們不可能同時在給其他容器裝,所以它們之間平時無法互相溝通,不可互相調用。

但凡事總有例外,如果在特定情況下有需要使用到子組件內的資料的話要怎麼做呢?我們可以藉由子組件釋放出的部分將其內部的資料帶給父組件使用,以下面程式碼舉例。


單一傳遞

<div id="app">
<h3>插巢 Prop</h3>
<p>將元件內的變數取出使用,稱為 slot prop</p>
<card>
<template v-slot:default>
我想取出元件的值來使用
</template>
</card>
</div>

<script type="module">
const app = Vue.createApp({
data() {
return {
product: {
name: '蛋餅',
price: 30,
vegan: false
}
}
},
});
app.component('card', {
data() {
return {
product: {
name: '蛋餅',
price: 30,
vegan: false
},
}
},
template: `<div class="card" style="width: 18rem;">
<div class="card-body" >
<slot :outsideProduct="product"></slot>
</div>
</div>`
});

app.mount('#app');
raw-image


圖示很明顯card子組件釋放的slot成功被父組件使用了,

也就是父層的我想取出元件的值來使用,成功顯示在card子組件裡面。

接下來就可以將內部資料傳遞給外層使用了,

因此我們要對著slot下:outsideProduct=”product”

前面的為傳給外層所使用的名稱,後面 "product" 為當前組件資料名稱。
raw-image


裡面有資料傳出來了,當然外面父組件要負責接收,

因此要在父層 template 上面剛設定 v-slot 的地方,

後面補上接收用的變數名稱 "iGetData" 如圖所示。

raw-image


由於 iGetData 是將內部有傳出來的資料都會納入其之內,

直接渲染{{iGetData}}會得到如圖

raw-image
raw-image


因此我們需要更內層的資料時,要對其物件取值,

接著可以這樣取{{iGetData.outsideProduct}}

這樣就能把需要的資料過濾出來了。

raw-image


多個傳遞使用

<div id="app">
<h2>多個(解構)</h2>
<card2 :product="product">
<template #default="{product,veganName}">
{{product}}
{{veganName}}
</template>
</card2>
</div>

<script type="module">
const app = Vue.createApp({
data() {
return {
product: {
name: '蛋餅',
price: 30,
vegan: false
}
}
},
});

app.component('card2', {
props: ['product'],
data() {
return {
veganName: ''
}
},
created() {
this.veganName = this.product.vegan ? '素食' : '非素食';
},
template: `<div class="card" style="width: 18rem;">
<div class="card-body" >
<slot :product="product" :veganName="veganName"></slot>
</div>
</div>`
})

app.mount('#app');
</script>


注意!!! <card2 :product=”product”> </card>內的product為父傳子props

搞清楚程式碼的關係後,我們很清楚知道card2跟slot雖然都有product,

但是是不同用途的,因此在寫之前一定要先釐清用途避免搞混。


這次 slot 為傳第2組資料出去,分別為 productveganName

這時我們的外層就可以分開來接收了,

用甚麼名稱傳出就用甚麼名稱接收 #default=”{product,veganName}”,

下圖的兩種方法都行。

raw-image
raw-image


  • joker
  • 2024/02/17
留言
avatar-img
留言分享你的想法!
avatar-img
Joker Cat
3會員
21內容數
是一隻喜愛前端勇往直前的霹靂酷樂貓
Joker Cat的其他內容
2024/06/04
平常我們在 html 上常看到的例如 v-for、v-model 等等... 也是VUE已經幫我們定義好的指令,而這次我們可以依這自己的需求來建立。 此功能屬於較進階的功能,因此實戰中會比較少見,市面上還是有不少完善的套件能達到同樣效果,建議可以先往這方面察找
Thumbnail
2024/06/04
平常我們在 html 上常看到的例如 v-for、v-model 等等... 也是VUE已經幫我們定義好的指令,而這次我們可以依這自己的需求來建立。 此功能屬於較進階的功能,因此實戰中會比較少見,市面上還是有不少完善的套件能達到同樣效果,建議可以先往這方面察找
Thumbnail
2024/06/03
我們在實作中,難免會遇到在不同組件中,卻有需求相同的資料格式,因此 mixins 可以達到我們的需求,除了 data 以外也包含了 methods 可以共用,舉例來說,學生資料可能會在,班級跟社團內被使用,當我們要撰寫元件時,就可以省略多餘的 data 定義。
Thumbnail
2024/06/03
我們在實作中,難免會遇到在不同組件中,卻有需求相同的資料格式,因此 mixins 可以達到我們的需求,除了 data 以外也包含了 methods 可以共用,舉例來說,學生資料可能會在,班級跟社團內被使用,當我們要撰寫元件時,就可以省略多餘的 data 定義。
Thumbnail
2024/05/30
VUE為單向資料流的框架,在鄰近層級之間我們可以依靠 props 由父層向子層來傳遞需要的資料,然而遇到跨層級的架構時,雖然也是可以一層層傳進去,只是這會造成多餘的處理及凌亂的程式碼,因此才有了 "provide" 來解決我們跨層級的需求。 層級展示圖
Thumbnail
2024/05/30
VUE為單向資料流的框架,在鄰近層級之間我們可以依靠 props 由父層向子層來傳遞需要的資料,然而遇到跨層級的架構時,雖然也是可以一層層傳進去,只是這會造成多餘的處理及凌亂的程式碼,因此才有了 "provide" 來解決我們跨層級的需求。 層級展示圖
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
提供一條簡單公式、一套盤點思路,幫助你快速算出去日本自助旅遊需要準備多少日幣現金!
Thumbnail
提供一條簡單公式、一套盤點思路,幫助你快速算出去日本自助旅遊需要準備多少日幣現金!
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
平常我們在 html 上常看到的例如 v-for、v-model 等等... 也是VUE已經幫我們定義好的指令,而這次我們可以依這自己的需求來建立。 此功能屬於較進階的功能,因此實戰中會比較少見,市面上還是有不少完善的套件能達到同樣效果,建議可以先往這方面察找
Thumbnail
平常我們在 html 上常看到的例如 v-for、v-model 等等... 也是VUE已經幫我們定義好的指令,而這次我們可以依這自己的需求來建立。 此功能屬於較進階的功能,因此實戰中會比較少見,市面上還是有不少完善的套件能達到同樣效果,建議可以先往這方面察找
Thumbnail
我們在實作中,難免會遇到在不同組件中,卻有需求相同的資料格式,因此 mixins 可以達到我們的需求,除了 data 以外也包含了 methods 可以共用,舉例來說,學生資料可能會在,班級跟社團內被使用,當我們要撰寫元件時,就可以省略多餘的 data 定義。
Thumbnail
我們在實作中,難免會遇到在不同組件中,卻有需求相同的資料格式,因此 mixins 可以達到我們的需求,除了 data 以外也包含了 methods 可以共用,舉例來說,學生資料可能會在,班級跟社團內被使用,當我們要撰寫元件時,就可以省略多餘的 data 定義。
Thumbnail
VUE為單向資料流的框架,在鄰近層級之間我們可以依靠 props 由父層向子層來傳遞需要的資料,然而遇到跨層級的架構時,雖然也是可以一層層傳進去,只是這會造成多餘的處理及凌亂的程式碼,因此才有了 "provide" 來解決我們跨層級的需求。 層級展示圖
Thumbnail
VUE為單向資料流的框架,在鄰近層級之間我們可以依靠 props 由父層向子層來傳遞需要的資料,然而遇到跨層級的架構時,雖然也是可以一層層傳進去,只是這會造成多餘的處理及凌亂的程式碼,因此才有了 "provide" 來解決我們跨層級的需求。 層級展示圖
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
自訂元件生成位置顧名思義就是可以指定部分HTML區塊渲染在特定的畫面上,即使在不同組件也能把A組件內的部分畫面,展現在B組件上,以下方程式舉例。
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
Thumbnail
Vue Router 及 具名視圖,擺脫以往切換依賴 CSS display:none 跟 display:block 互相配合,有時還得搭配 z-index 來調整層級跟 opacity 透明度的麻煩,而 Vue Router 完美的解決了這棘手的問題,且能客製頁面想要呈現的擺飾。
Thumbnail
Vue Router 及 具名視圖,擺脫以往切換依賴 CSS display:none 跟 display:block 互相配合,有時還得搭配 z-index 來調整層級跟 opacity 透明度的麻煩,而 Vue Router 完美的解決了這棘手的問題,且能客製頁面想要呈現的擺飾。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot插槽 ,其中包含默認、具名、語法糖。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot插槽 ,其中包含默認、具名、語法糖。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News