iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0

今天我們要來完成列表的部分,還有無資料的時候的畫面

首先是無資料的時候:
https://ithelp.ithome.com.tw/upload/images/20240918/20169170C6mvtDEWVd.png

<template>
		<div class="min-w-[300px] max-w-[50vw] h-[75vh] mx-auto flex flex-col gap-4 shadow-lg bg-tiffanyBlue rounded-lg">
			<header class="pt-5 text-center gap-[10px] text-[20px] font-black">代辦事項清單</header>
			<div class="flex gap-[10px] mx-4">
				<p class="flex items-center whitespace-nowrap font-semibold mb-0">標題 :</p>
				<a-input v-model:value="inputVal" placeholder="請輸入內容" />
				<a-button class="shadow-lg border-transparent" @click="joinList">加入</a-button>
			</div>
			
			//此次新加的部分
			<div class="overflow-y-auto overflow-x-clip flex-grow flex flex-col border border-black">
			
			</div>
		</div>
</template>
<script setup>
</script>
<style scoped>
</style>

我們先新加了一個div,並在裡面寫上了允許裡面的內容出現直向卷軸(overflow-y-auto)以及不能出現橫向捲軸(overflow-x-clip),並且用flex-grow使這個div佔滿我們todolist的所有空間,而todolist的列表我們預計是直向排列的,所以寫了flex和flex-col進行直向排列,最後為了確認該div的內容範圍,我們加上了border和border-black進行觀察,就會像這樣:

https://ithelp.ithome.com.tw/upload/images/20240918/201691702ugGHKR4Rx.png

而無資料的畫面我們可以用antd-vue的a-empty來實現

<template>
	<div class="min-w-[300px] max-w-[50vw] h-[75vh] mx-auto flex flex-col gap-4 shadow-lg bg-tiffanyBlue rounded-lg">
		<header class="pt-5 text-center gap-[10px] text-[20px] font-black">代辦事項清單</header>
		<div class="flex gap-[10px] mx-4">
			<p class="flex items-center whitespace-nowrap font-semibold mb-0">標題 :</p>
			<a-input v-model:value="inputVal" placeholder="請輸入內容" />
			<a-button class="shadow-lg border-transparent" @click="joinList">加入</a-button>
		</div>
		<div class="overflow-y-auto overflow-x-clip flex-grow flex flex-col border border-black">
			
			
			//此次新增的部分
			<div >
				<a-empty>
					<template #description>
						<span> 沒有資料 </span>
					</template>
				</a-empty>
			</div>
			
		</div>
	</div>
</template>
<script setup></script>
<style scoped></style>

我們用了一個div去包覆了a-empty,是為了跟有資料時候的列表的內容做區隔而在a-empty中有提供一個名叫 #description的slot插槽,可以讓我們去設計當沒有資料的時候,a-empty的內容會是甚麼:

https://ithelp.ithome.com.tw/upload/images/20240918/20169170C4xhQvfogr.png

接下來我們要來做列表框了,預計會像下面紅框的內容:

https://ithelp.ithome.com.tw/upload/images/20240918/20169170Sw6pc45Wbc.png

這邊的話我們會新增下列程式碼:

<template>
	<div class="min-w-[300px] max-w-[50vw] h-[75vh] mx-auto flex flex-col gap-4 shadow-lg bg-tiffanyBlue rounded-lg">
		<header class="pt-5 text-center gap-[10px] text-[20px] font-black">代辦事項清單</header>
		<div class="flex gap-[10px] mx-4">
			<p class="flex items-center whitespace-nowrap font-semibold mb-0">標題 :</p>
			<a-input v-model:value="inputVal" placeholder="請輸入內容" />
			<a-button class="shadow-lg border-transparent" @click="joinList">加入</a-button>
		</div>
		<div class="overflow-y-auto overflow-x-clip flex-grow flex flex-col border border-black">
			//這是此次新增的部分
			<div class="my-[10px]">
				<div>
					<div class="flex p-2 shadow-lg rounded-xl gap-1 items-center min-w-[275px] mx-3 my-3 bg-white">
						<a-input class="p-[5px] truncate" :bordered="false" />
						<font-awesome-icon class="cursor-pointer text-gray-500" icon="fa-solid fa-pen-to-square" />
						<font-awesome-icon class="cursor-pointer text-gray-500" icon="fa-solid fa-trash" />
					</div>
				</div>
			</div>
			
			//這是先遮起來的部分
			<!-- <div>
				<a-empty>
					<template #description>
						<span> 沒有資料 </span>
					</template>
				</a-empty>
			</div> -->
		</div>
	</div>
</template>
<script setup></script>
<style scoped></style>

我們先用一個div設定列表上下的邊距(my-[10px]),然後先寫一層div預計未來要跑迴圈用,更裡面一層則是用來控制a-input和font-awesome-icon的排版樣式,由於都是一些基本的排版屬性我就不特別說明了,不過可以值得一提的是 “truncate”這個 class 名。

以往我們要進行文字出現刪節號的時候都需要寫overflow: hidden、text-overflow: ellipsis、white-space: nowrap 三個屬性,但 tailwind 使用了 truncate 這個 class 類名就將上述三屬性包含起來了,使得程式碼變得更加簡潔!!

而需要注意的是我們使用了 font awesome 的 fa-pen-to-square 和 fa-trash 兩個 icon,所以我們也要在main.js進行引用:

https://ithelp.ithome.com.tw/upload/images/20240918/20169170eJIRdIA9Ee.png

接下來讓我們看一下成果吧!!

https://ithelp.ithome.com.tw/upload/images/20240918/201691701dK2tPTQeP.png

這樣差不多就結束了,移除掉外框線後就跟我們一開始規畫的一模一樣摟!


上一篇
和2魚坐牢的第八天-todolist畫面切版
下一篇
和2魚坐牢的第十天-todolist之新增功能
系列文
和鱷魚組長的坐牢30天之vue的簡易todolist和Astro的簡易部落格實現30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言