如何在Alpine.js应用中按时间间隔设置计时器

时间:2020-08-18 14:59:19

标签: alpine.js

使用alpine.js 2,我尝试在应用的页脚(为所有布局设置的页面)中定义计时器:

<div>
    
    <div  x-data="appFooterComponent()" x-init=" console.log('initTimer()::'); refreshTime();
    setInterval(refreshTime, 1000) ; console.log('END initTimer::');">
        <div >
            ...
            <span style="background-color: yellow" x-text="refreshTime(@this)"></span>
        </div>
    </div>
</div>

<script>
    // THAT DOES NOT WORK
    // this.refreshTime()
    // setInterval(refreshTime, 1000)

    function appFooterComponent() {
        return {
            refreshTime() {
                return moment(new Date()).format('DD MMMM, YYYY HH:mm:ss')
            },
        }
    } 

</script>

作为结果,当打开任何新页面时,我会看到如何设置当前日期时间,但是没有间隔并且时间不会立即刷新。 在控制台中,我看到x-init控制台命令的输出,但没有时间间隔... 如何解决?

谢谢!

1 个答案:

答案 0 :(得分:2)

以下工作吗?

您可能要对Alpine.js进行的操作是使用time变量进行更新(使用setInterval),然后可以使用this.time和相关的Moment.js表达式读取格式化时间

<div>
    <div x-data="appFooterComponent()" x-init="init()">
        <div>
            ...
            <span style="background-color: yellow" x-text="getTime()"></span>
        </div>
    </div>
</div>

<script>
    function appFooterComponent() {
        return {
            time: new Date(),
            init() {
              setInterval(() => {
                this.time = new Date();
              }, 1000);
            },
            getTime() {
                return moment(this.time).format('DD MMMM, YYYY HH:mm:ss')
            },
        }
    } 

</script>