[Day 24] 实作-日期格式转换 字串长度限制

好的~ 昨天做好搜寻栏了,今天来做下面的列表

https://ithelp.ithome.com.tw/upload/images/20211008/20140745ymHQ0G3ttd.png

那一样需要先建一个子组件,可以参考 Day21,这边就不赘述


父组件 FestivalPage.vue

引入资料

这次资料集是用 节庆专区 这支api,这边先放其中一笔当参考

{
    "actId": 451,
    "actName": "2021新社花海节",
    "levelName": "国际级",
    "grade1": "浪漫",
    "grade2": "",
    "grade3": "乐活",
    "grade4": "",
    "grade5": "",
    "grade6": "",
    "description": "「新社花海」活动以「幸福花海、慢活山城、悠游台三线」为主轴,促进花海及山城自然农村特色与休闲农业区活动,营造「慢城」、「慢活」与「漫游」的台三线,进行点、线、面之推动,打造属於山城地区之农村休闲、体验及疗癒之新兴产业。活动以农委会种苗改良场第二农场40公顷土地为基地,营造秋季花海飨宴。常年则以国家级推动方案之「浪漫台三线-农情客家庄」环境整备目标,打造中部山城地区环境优美之入口意象。",
    "participation": "",
    "cityId": 1018,
    "address": "台中市 新社区协成里协兴街30号",
    "tel": "",
    "org": "台中市政府、行政院农业委会种苗改良繁殖场",
    "startTime": "Nov 1, 2021 12:00:00 AM",
    "endTime": "Dec 31, 2021 12:00:00 AM",
    "cycle": "2021年暂停办理",
    "noncycle": "",
    "website": "",
    "longitude": "24.2032599",
    "latitude": "120.8059929",
    "class1": "01",
    "class2": "02",
    "map": null,
    "travellinginfo": "",
    "parkinginfo": "",
    "charge": "",
    "remarks": "",
    "cityName": "台中市  新社区(新社乡)",
    "imageUrl": "/e_new_upload/task/a66dc343-cd8b-4ee0-a265-8d7fff520c3b/C2_315080000H_080551/abfd8ed838981f6c3ca4254b792be5a0368c91cc.jpg"
},

把资料从父组件传到子组件

<v-col sm="12" 
  v-for="item in festivalList" 
  :key="item.actId">
  <Festival :festival="item"></Festival>
</v-col>

子组件 Festival.vue

插入图片

在Day22的时候有分析过资料集,imageUrl他是提供内部的档案位置,在前面还需要加上https://cloud.culture.tw/ 才能顺利捞到图片,这边写一个简单function来转换连结

getImageUrl(imageUrl) {
    return `https://cloud.culture.tw/${imageUrl}`;
},
<v-img 
  class="white--text align-end" 
  :src='getImageUrl(festival.imageUrl)' 
  max-height="200" 
/>

活动等级

这边使用v-chip组件来呈现,主要有分国际级跟全国级,用简单的v-if v-else处理即可。

<v-chip v-if="festival.levelName==='国际级'"
  label
  color="orange darken-3"
  text-color="white"
>
  {{ festival.levelName }}
</v-chip>
<v-chip v-else
  label
  color="blue darken-3"
  text-color="white"
>
  {{ festival.levelName }}
</v-chip>

日期格式转换

原本的日期是 "Nov 1, 2021 12:00:00 AM" 这种格式,但是我想要转成YYYY/MM/DD 这种比较好阅读的格式,这边一样写一只简单的Funtion来转换。

这边用到 Date.parse() 这个功能,他可以把日期格式转为毫秒,细节可参考这篇

然後用 new Date() 转成系统可以理解的日期,最後取出需要的栏位组成日期字串,可参考这篇

getDateFormat(datetime) {
    const newDate = new Date(Date.parse(datetime));
    return `${newDate.getFullYear()}/${newDate.getMonth() + 1}/${newDate.getDate()}`;
},

文字超过限制转为 ...

因为活动描述都太长了,如果全部显示的话,画面会太长也不好看,

原本 v-card 就有预设 overflow 的属性了,不过它显示的行数还是太多,

我希望可以最多显示4行字就好,详细可参考这篇

这边采用CSS的方式

<div class="festival-desc">
    <p class="ellipsis">{{ festival.description }}</p>
</div>
.festival-desc {
  font-size: medium;
}

.ellipsis {
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 4;   /* 想要显示多少行字*/
  -webkit-box-orient: vertical;
  white-space: normal;
}

完整程序码

请参考 GitHub

父组件 FestivalPage.vue

子组件 Festival.vue

成果展示

https://ithelp.ithome.com.tw/upload/images/20211008/20140745qVcbuNWq1L.png

https://ithelp.ithome.com.tw/upload/images/20211008/20140745ahGlXLjL2r.png

好的~ 现在做这种活动清单真的是愈来愈得心应手了

所以就不会像之前那样一步一步纪录讲解,而是全部做完才分part介绍

写文速度也快很多~

希望看得懂 吧


<<:  Day25 Vue 双向绑定 vs 单向绑定

>>:  IT 铁人赛 k8s 入门30天 -- day25 Indexed Job for Parallel Processing with Static Work Assignment

从 IT 技术面细说 Search Console 的 27 组数字 KPI (19) :10 个最好检查的排名因子 (SC外)

这篇是回头讲一些不在 Google Search Console 的 『KPI』,有时会发现这些更重...

Flutter体验 Day 3-Dart CheatSheet (1)

Dart CheatSheet (1) 虽然不一定要掌握 Dart 才可以开始 Flutter 的开...

Day28-保护鲸鱼人人有责(三)

小结 前两天讲了几个比较重要的 Dockerfile best practice 之後,今天要来说一...

Day 17 读 Go Concurrency Patterns - Rob Pike IV

续上篇,Day 16 读 Go Concurrency Patterns - Rob Pike II...

Day 13 - 物品借用纪录系统 (3) 程序码解说

今天主要是来补足 Day11 和 Day12 简(ㄏㄨㄚˊ)约(ㄕㄨㄟˇ)的部分。 我们会讲两个东西...