日期时间格式化
demo目录
具体实现
使用插件
dayjs
npm install dayjs -d
//formate-time.js
import dayjs from 'dayjs'
export default function(app){
let formatString = 'YYYY-MM-DD HH:mm:ss'
app.directive('format-time',{
created(el,bindings) {
if(bindings.value){
formatString = bindings.value
}
},
mounted(el) {
const textContent = el.textContent
let timeStamp = parseInt(textContent)
if(textContent.length===10){
timeStamp = timeStamp * 1000
}
el.textContent = dayjs(timeStamp).format(formatString)
},
})
}
//index.js
// eslint-disable-next-line no-unused-vars
import resgisterFomatTime from './formate-time';
export default function registerDirectives(app){
resgisterFomatTime(app)
}
//main.js
import { createApp } from 'vue'
import App from './App.vue'
import registerDirectives from './directives'
// 修改后
const app = createApp(App);
registerDirectives(app)
app.mount('#app')
// 修改前
// createApp(App).mount('#app')
//App.vue
<template>
<h2 v-format-time="'YYYY/MM/DD'">{{timeStamp}}</h2>
<!-- <img alt="Vue logo" src="./assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/> -->
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
export default {
name: 'App',
components: {
// eslint-disable-next-line vue/no-unused-components
HelloWorld
},
setup() {
const timeStamp = 1667809876417
return {
timeStamp
}
}
}
</script>
实现效果
小问题
如果在同一vue文件中,多次使用的自定义指令,并且给formatString
赋值,那么同一文件中,其他使用的地方也会套用格式。
解决呢
//formate-time.js
import dayjs from 'dayjs'
export default function(app){
//let formatString = 'YYYY-MM-DD HH:mm:ss'换位置
app.directive('format-time',{
created(el,bindings) {
//修改后
bindings.formatString = 'YYYY-MM-DD HH:mm:ss'
if(bindings.value){
formatString = bindings.value
}
},
mounted(el) {
const textContent = el.textContent
let timeStamp = parseInt(textContent)
if(textContent.length===10){
timeStamp = timeStamp * 1000
}
el.textContent = dayjs(timeStamp).format(bindings.formatString)
//这里就可以在bindings中拿到formatString
},
})
}
指令生命周期
created
:在绑定元素的attribute(属性)或事件监听器被应用之前调用beforeMount
:当指令第一次绑定到元素并且挂载父组件之前调用mounted
:在绑定元素的父组件被挂载后调用beforeUpdate
:在更新包含组件的VNode之前调用updated
:在包含组件的VNoe及其子组件的VNode更新后调用beforeUnmount
:在卸载绑定元素的父组件之前调用unmouted
:当指令与元素解除绑定且父组件已卸载时,只调用一次