iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0
Vue.js

遊戲活動關卡查詢網站系列 第 13

遊戲活動關卡查詢網站Day13-顯示副本資訊1(Vue:Emits)

  • 分享至 

  • xImage
  •  

目標
上一篇已經顯示了活動一覽列表
這次要顯示副本資訊
當點擊活動一覽的圖案時
會在底下顯示該活動的所有副本

由於內容篇幅過長 這部分會分成兩篇解說
第一篇將資料由B組件傳給父組件
第二篇將資料由父組件傳給C組件

步驟
1.
我們先前已經讀取Supabase資料
並存取於result

這時,要將B組件的資料傳到C組件
也就是說我們會做下圖的事情
●點擊B組件的圖片觸發事件
●將資料傳到父組件(APP.vue)
●父組件將資料遞給C組件
●C組件藉由Props接收這份動態資料

首先點擊圖片後,actionSelect與eventList會變更
接著將eventList透過response這個監聽事件傳給父組件
也就是說eventList 有變更時就會觸發這個監聽事件
以下為B組件的程式架構

<script setup>
/* global defineEmits */
const emit = defineEmits(["response"]);
const actionSelect = ref("");
const eventList = ref([]);

//...中間略

function selectAction(e) {
	var data = e.target.getAttribute("data-dataInfo");
	actionSelect.value = data;
	
	eventList.value = 
		actionSelect.value == "" 
		? result.value
		: result.value.filter(x=>x.actionNo == actionSelect.value)

	emit("response", {"actionNo":actionSelect.value,"info":eventList.value});
}
</script>
<template>
	<div class="row"><h1>活動一覽</h1></div>
	<div class="row" >
		<div class="col-3 " v-for="item in actionList" :key="item.ID">
			<img :src="getImg(item.actionNo)" style="width:100%;"
			@click="selectAction" :data-dataInfo="item.actionNo">
		</div>
	</div>
</template>

當父組件監聽到B組件有變更時
這邊會回傳東西回來 我們用B_msg 去接收這個東西
也就是說點擊B組件圖片時,eventList有變動
便會傳回到父組件的B_msg更新
那麼父組件如何將資料傳給C組件呢? 我們下一篇繼續說明
以下提供父組件的程式架構

<script setup>
..以上略

const B_Msg = ref([{}]); 
</script>

<template>
<div class="row">
				<div class = "col-12 border" style="height:250px;overflow:auto;">
					<B-action @response="(msg) => B_Msg = msg"/>
				</div>
</div>
</template>

備註

複習一下這篇做的事情
●B組件加上點擊事件 ->要傳出的資料以活動編號過濾

●點擊B組件的圖片 ->B組件再透過emit傳出資料
父組件透過監聽response的方式
接收資料,然後存給B_msg


上一篇
遊戲活動關卡查詢網站Day12-活動一覽顯示(Vue:Computed)
下一篇
遊戲活動關卡查詢網站Day14-顯示副本資訊2(Vue:Props)
系列文
遊戲活動關卡查詢網站23
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言