iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 24
1
Modern Web

從零開始的個人化記帳程式開發系列 第 24

記帳程式 (24):專案開發 Part.4 - Day.js 安裝及 Vue.js global method 筆記

昨天將以前手刻的月曆元件引入後,今天目標是將月曆與底下列表做串接,但首先呢要先引入 Day.js 這個套件,並順便筆記一下在 Vue 中寫成 global method 的做法。

安裝 Day.js

因為一扯到日期相關的功能,就一定得要處理日期格式的問題。

這裡選擇使用之前有使用過的套件 Day.js,它的介紹相當簡潔有力:

Moment.js 的 2kB 輕量化方案,擁有同樣強大的 API。

也就是這是一個跟 Moment.js 一樣好用且又佔據更少加載資源的套件。安裝方式非常簡單:

npm install dayjs

輸入上面指令即可,接下來一樣要將日期格式化的方法寫成全站共用。

將日期格式處理寫成 global method

而將日期做格式化這件事想必是之後會一直用到,所以這邊會考慮先寫成全站可以共用的方法,那這個需求在 Vue 中通常不是寫成 mixins 就是寫成 plugins

而雖然 mixins 有全局引用的寫法,但是根據官方的警語:

請謹慎使用全局混入,因為它會影響每個單獨創建的 Vue 實例 (包括第三方組件)。大多數情況下,只應當應用於自定義選項,就像上面示例一樣。推薦將其作為插件發布,以避免重複應用混入。

所以 mixins 一般建議只有用在局部共用就好,而若要寫成全站共用最好還是寫成 plugins,變成我後來開發時大多都不太喜歡寫成 mixins ,而是利用下面的做法包成 plugins:

import Vue from 'vue'
import dayjs from 'dayjs'

const dateFormatDash = (date, format = 'YYYY-MM-DD') => {
  return date ? dayjs(date).format(format) : ''
}

const timeParserPlugin = {
  install(Vue, options) {
    Vue.prototype.$dateFormatDash = dateFormatDash
  }
}

Vue.use(timeParserPlugin)

這裡的 dateFormatDash 用途是利用 Day.js 將日期格式轉換為 YYYY-MM-DD,這樣的寫法可以在全站的元件中直接使用 this.$dateFormatDash() 這樣的寫法,舉個例子:

mounted() {
  const now = this.$dateFormatDash(new Date())
  this.currentDate = now
}

可以像上面這樣直接在某個元件中做使用,而不需要一直重寫。

再回到 plugin 中的內容,這邊利用 JavaScript 的 prototype 概念,將要讓全站共用的自定義的方法,掛到 Vue instance 的 prototype 上面:

Vue.prototype.$dateFormatDash = dateFormatDash

然後使用 Vue 中提供的 install 方法,將這一段包成 timeParserPlugin,最後再使用 Vue.use 來引入這個 plugin。

另外一種寫法也可以將 install 直接 export 出去,供其他外層檔案更彈性的使用 Vue.use,但基本上是一樣的意思,所以這裡就直接都寫在同一個檔案裡了:

export default {
  install(Vue, options) {
    Vue.prototype.$dateFormatDash = dateFormatDash
  }
}

參考資料

關於在 Vue 中各種 plugin 的寫法可以參考這篇文章 —— [Vue.js] global method 的復用


上一篇
記帳程式 (23):專案開發 Part.3 - 月記帳本加上月曆
下一篇
記帳程式 (25):專案開發 Part.5 - 完成月曆串接記帳列表
系列文
從零開始的個人化記帳程式開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言