早安!今天目標是把活動清單頁面完成!
昨天做到父組件傳遞資料到子組件了,那今天就是要利用這些資料來完善頁面
先列一下要做什麼:
好的我們一個一個來~
上面這些資訊在api中都有了,所以只要塞到對應的位置就可以了
接下來會把程式碼拆開逐一介紹,如果覺得有點混亂,頁面最下方有放完成程式碼。
<v-img
class="white--text align-end"
height="200px"
:src="topic.imageUrl" <!-- 把圖片連結設為 topic.imageUrl -->
/>
<v-card-title>{{ topic.title }}</v-card-title>
這邊利用 v-if
去判斷起始日期跟結束日期是不是同一天,
如果是的話就只顯示 開始日期,如果不是的話就顯示 開始日期~結束日期
<div>
<v-icon>event</v-icon>
{{ topic.startDate }}
<div
class="content"
v-if="topic.startDate !== topic.endDate">
~{{ topic.endDate }}
</div>
</div>
活動地點有2個欄位 location 跟 locationName,這邊判斷如果location內為空時,改顯示locationName
這邊採用 條件(三元)運算子的方式來寫,格式很像 if else的寫法
condition ? true執行的部分 : false執行的部分
<div>
<v-icon>location_on</v-icon>
{{ topic.showInfo[0].location !== ''
? topic.showInfo[0].location
: topic.showInfo[0].locationName }}
</div>
跟上面的地點字段不同,標籤需要更改顏色,
用條件運算子的話會沒那麼好讀,所以改用 v-if v-else
的方式來寫
<v-chip
v-if="topic.showInfo[0].onSales ==='N'"
class="ma-2"
color="green"
text-color="white"
small
>
免費
</v-chip>
<v-chip
v-else
class="ma-2"
color="orange"
text-color="white"
small
>
付費
</v-chip>
這個部分比較複雜一點,因為data傳來的類別是1、2、3...,但是要顯示的是中文類別名稱
所以需要用個對照表,讓他可以自己對照類型,
首先加一個 methods參數,裡面可以自己寫多個method
這邊新增一個 getTopicCategory ( category) 方法
Topic.vue
<script>
export default {
name: 'Topic',
props: ['topic'],
methods: {
getTopicCategory(category) {
const categoryEnums = {
1: '音樂',
2: '戲劇',
3: '舞蹈',
4: '親子',
5: '獨立音樂',
6: '展覽',
7: '講座',
8: '電影',
11: '綜藝',
13: '競賽',
14: '徵選',
15: '其他',
17: '演唱會',
19: '研習課程',
};
return categoryEnums[category];
},
},
};
</script>
然後在template呼叫這個方法,這邊要記得帶入類別參數
<v-chip
class="ma-2"
color="grey"
text-color="white"
small
>
{{ getTopicCategory(topic.category) }}
</v-chip>
連結的部分原始資料一樣有2個欄位 webSales 跟 sourceWebPromote,
這邊可以用一個更簡單的方法 邏輯運算子
如果webSales為空 就顯示sourceWebPromote
<v-card
class="mx-auto text-left"
max-width="400"
:href="topic.webSales && topic.sourceWebPromote"
target="_blank"
>
請參考 GitHub
父組件 TopicPage.vue
子組件 Topic.vue
完成~~
這篇改了一下敘述的方式
變成全部寫完再來解釋code,就沒有完成每個步驟都截圖了
之後應該也會採用這種方式~ ( 因為這樣寫文比較快
ok 記得commit 明天見