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
3會員
19內容數
是一隻喜愛前端勇往直前的霹靂酷樂貓
留言0
查看全部
發表第一個留言支持創作者!
Joker Cat 的其他內容
2023 Vue直播班筆記 - Slot插槽
閱讀時間約 6 分鐘
你可能也想看
【程式學習日記】六角學院:2023 Vue 作品實戰班從 Vue 班畢業已經 1 個多月,最近也轉職成功,終於有機會把這段歷程記錄下來,當作一個里程碑。此次參加 Vue 班,心境上最大的不同,大概是知道自己即將在完課後,踏上求職道路。所以如果能在課堂期間 2 個月內完成求職作品,我就能提早出發。 ▍學習狀況 雖然先前有稍微玩過 Vue,但也早已
Thumbnail
avatar
Ann Chou
2024-05-11
2023這一年讓我知道了沒有完美的人事物 我也是一個充滿缺失的個體
Thumbnail
avatar
Po
2024-03-11
2023這些那些關於即將成為過去的那一年 在這個名之為我的小宇宙 泛起過一片漣漪 和其他生命的交會與告別 或久別重逢 或不如歸去 留下些什麼 我們就逐漸長成那個模樣 記憶的刻痕是我們選擇的事實 似真還假 孰是孰非 有何干係 物質構築的既成事實 缺席的不在場證明
Thumbnail
avatar
YiYi
2023-12-31
2023年草嶺古道芒草季|交通路徑、美景圖文紀錄幫大家標示容易走錯的幾個路口,希望可以幫助大家的旅途順利~ 嘗試用圖文方式記錄遊記,好像讀起來更生動了。
Thumbnail
avatar
喬安納
2023-12-04
2023-Vue六角直撥班心得為什麼會參加這個課程 2022年是個不一樣的年,因為當初自學由設計轉前端工程師、一路上跌跌撞撞因為想要把基底打穩所以今年下定了決心從2022切版班、Js直播班、一路跟到目前2022秋季Vue直播班。 Vue直播班的心得 前兩週其實都還跟得上,但到了第三週對我而言確實感覺有些難了啊~正在心裡徬徨第三週
Thumbnail
avatar
布萊N
2023-03-19
20232023年
Thumbnail
avatar
竹川獅
2023-01-21
2023新年一年新的開始,最近事情太多,本想說寫點什麼的...但最近真的工作遇到些瓶頸,剛好在年底把這些不順遂的事情一併都處理掉了,稍微有點時間可以好好的敘述一下最近發生的事情。是這樣的,我前份工作傳統產業做得不太開心,本人的職業是平面設計師,據大家的認知傳產從上到下都是親戚接管事業,當然我的工作也不例外,
Thumbnail
avatar
不惑人生
2023-01-01
2023欲說還休,欲說還休,卻道天涼好個秋 想來也到了「欲說還休」的時候了。 是年紀的增長多了顧慮,還是收斂了自己的負面情緒,或者,只是懶了,我在也不像從前能在FB上po出長文。不管當下的情緒多麼澎派,多想要發表言論,回到家了,坐在電腦前面,就沒了發文的欲望了。 其實也有點擔心,難道已經被速食文化變得淺薄了
Thumbnail
avatar
Hedi Yang
2022-12-31
2023新的一年即將開始,人類這種生物很奇妙,喜歡有一種重新啟動的感覺。
Thumbnail
avatar
記憶,那些
2022-12-30
2023 2023 1.我希望我可以自由的工作、開心的工作、利用我的工作能力我自己賺到生活費。 2.我希望我可以有車子、讓我自由的旅行、享受大自然、我並不是想要在家裡放一台車、而是可以讓我隨時隨時都有一台車。 3.我希望我可以去一些國家旅行想去泰國、加拿大,芬蘭、歐洲。 4.我想瘦到我想要的體重。
Thumbnail
avatar
阿硬
2022-07-07