一个vue3实时时间的自定义指令

6 篇文章 0 订阅

目录

一、代码

二、效果

总结

一、代码

<body>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    <script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js"></script>

    <div id="app">
        <p v-time></p>
        <p v-time="'HH:mm'"></p>
        <p v-time="'YYYY-MM-DD HH:mm:ss'"></p>
        <p v-time="'hh:mm:ss'"></p>
        <p v-time="'YYYY年MM月DD日HH时mm分'"></p>
    </div>

    <script>
        const app = Vue.createApp({})

        app.directive('time', {
            mounted(el, binding) {
                if ('$TIMEVALLIST' in window) {
                    const timeList = window['$TIMEVALLIST']
                    window['$TIMEVALLIST'][timeList.length] = setInterval(() => {
                        el.innerText = dayjs(new Date()).format(binding.value || 'YYYY/MM/DD HH:mm:ss')
                    }, 1000)
                    el.setAttribute('time_val_index', timeList.length)
                } else {
                    window['$TIMEVALLIST'] = []
                    window['$TIMEVALLIST'][0] = setInterval(() => {
                        el.innerText = dayjs(new Date()).format(binding.value || 'YYYY/MM/DD HH:mm:ss')
                    }, 1000)
                    el.setAttribute('time_val_index', 0)
                }
            },
            unmounted(el) {
                clearInterval(window['$TIMEVALLIST'][+el.getAttribute('time_val_index')])
            }
        })

        app.mount('#app')
    </script>
</body>

二、效果

这是实际效果,懒得搞动图,反正时间能跑。 


总结

今天闲着随便写了个,能用是能用,好不好用不知道。说到底还是用了dayjs,存在了依赖。不过dayjs还是大部分项目中都会依赖的,亦或者是momentjs。主要是应用场景有限,可以说是几乎没有。偶尔有一个也不会想着搞个自定义指令。但是思路我还是想发出来,期待路过的大佬能评论区指点一二。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值