vue3学习:数字时钟遇到的两个问题

news2024/10/27 9:38:08

在前端开发学习中,用JavaScript脚本写个数字时钟是很常见的案例,也没什么难度。今天有时间,于是就用Vue的方式来实现这个功能。原本以为是件非常容易的事,没想到却卡在两个问题上,一个问题通过别人的博文已经找到答案,还有一个问题却还是不知道是什么原因造成的。

问题一 this指向的问题

mounted() {
   var _this = this;
   setInterval(function () {
      _this.today = new Date()
   }, 1000)
}

在上面这段代码中,我开始不太理解为什么要把 _this = this,感觉有点多此一举。于是便把这行代码弃了,直接用this,结果程序不能正常执行了。我知道是this的原因,但是个中具体的缘由却说不明白。
后来在网上看到一篇博文,把这个问题三言两语就说明白了,非常感谢博主的分享。
我们要获取vue变量或方法的时候,一般使用this,但是在回调函数中,this指向的就不是vue变量,而是回调函数本身,所以在一开始的时候,先定义_this=this,这样在任何位置都可以用_this来获取vue变量或方法。
也就是说,回调函数外的this指的是Vue对象,回调函数内的this默认是指向回调函数了,两者不相同,这样_this = this就不难理解了。

问题2 格式化时、分、秒的时候,用了三目运算符,分成两行写,程序可以正常运行,合成一行写就是undefined。

(1)分成两行写,正常运行,代码如下,效果如图。

 var second = this.today.getSeconds() 
 second = second < 10 ? '0' + second : second

在这里插入图片描述
(2)合成一行写,显示undefined,代码如下,效果如下图,加上括号运行也是undefined

var second = this.today.getSeconds() < 10 ? '0' + second : second
var second =this.today.getSeconds() < 10? '0' + second : second

在这里插入图片描述

试了一下,在javaScript中也是这样的,我不清楚是什么原因造成的,是我的代码有错误吗?或者三目运算符有什么要求?
完整代码如下:

<!DOCTYPE html>
<html>
<head>
    <title>实时显示的日期和时间</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>

<body>
    <div id="app">
        {{message}}
        <sub-component v-if="show"></sub-component>
        <button @click="change">切换</button>
    </div>
    <template id="displayTime">
        <div>
            {{dispTime() }}
        </div>
    </template>
</body>
<script type="text/javascript">

    const SubComponent = {
        template:'#displayTime',
        data() {
            return {
                today: new Date(),
            }
        },
        methods: {
            dispTime() {
                var year = this.today.getFullYear()
                var month = this.today.getMonth() + 1
                var date = this.today.getDate()
                var hour = this.today.getHours()
                hour = hour < 10 ? '0' + hour : hour
                var minute = this.today.getMinutes();
                minute = minute < 10 ? '0' + minute : minute
                // var second = this.today.getSeconds() 
                // second = second < 10 ? '0' + second : second
               var second = this.today.getSeconds() < 10 ? '0' + second : second
                return `${year}${month}${date}${hour}:${minute}:${second}`
            }

        },
        mounted() {
            var _this = this;
            var timer = setInterval(function () {
                _this.today = new Date()
            }, 1000)
        },
        //实例销毁之前调用
        beforeUnmount() {
            if (this.timer) {
                clearInterval(this.timer); //在Vue实例销毁前清除定时器
            }
            console.log('清除时钟')
        }
    }
    const RootComponent={
        data() {
            return {
                message: '数字时钟',
                show: true,
            }
        },
        methods: {
            change() {
                this.show = !this.show
            }
        },
        components:{
            SubComponent,
        }
    }
    const vueApp = Vue.createApp(RootComponent)
    vueApp.mount("#app")
</script>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaSE——集合4:LinkedList、ArrayList与LinkedList的选择

目录 一、LinkedList的全面说明 二、LinkedList的底层操作机制 (一)LinkedList添加结点源码 (二)LinkedList删除结点源码 三、LinkedList常用方法 四、ArrayList与LinkedList的选择 一、LinkedList的全面说明 LinkedList底层实现了双向链表和双端队列的特点可以添加任意…

设计模式之-策略模式配合枚举

1、定义枚举接收不同的参数使用不同的handler, 2、定义个handerl接口&#xff0c;统一方法处理&#xff0c;每个handler实现该接口 public interface IMethodHandler<T, R> {/*** 处理统一入口** param req*/R process(T req); } java3、定义一个简单工厂统一处理 Comp…

Centos7内核升级

案例分析Centos7内核升级 1. 规划节点 节点规划&#xff0c;见表1。 IP主机名节点10.24.2.5k8s-master-node1master节点、仓库节点 表1 节点规划 2. 基础准备 &#xff08;1&#xff09;删除官方yum源 [rootk8s-worker-node1 ~]# rm -rf /etc/yum.repos.d/*&#xff08;…

Redhat的yum源出错——如何将yum源换成阿里云Centos源

文章目录 引言1. 查看和删除已安装的yum包2. 查看系统的版本号3. 镜像文件下载4. 镜像文件安装5. 下载和安装repo文件6. 配置repo文件7. 更新软件包缓存8. 验证9. 问题问题1 参考文献 Linux RedHat更换阿里云yum源 Redhat8.0 yum install问题解决 阿里云镜像 引言 为什么redha…

有关vue路由的学习

导言 由于很久没碰前端了&#xff0c;碰到路由都不太会了。趁着后端对接来记录一下&#xff0c;就当复习。不过由于个人能力有限&#xff0c;这篇会偏向整个过程的实现逻辑&#xff0c;其中有很多具体的方法不会给来&#xff0c;有兴趣的可以去看一下源码~ 目的&#xff1a; …

智能驾驶|迈向智能出行未来,AI如何应用在自动驾驶?

自动驾驶通过人工智能&#xff08;AI&#xff09;、机器学习、传感器融合和实时数据处理&#xff0c;使车辆能够在无需人类干预的情况下自主驾驶。随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;与智能汽车的结合正在成为现代交通运输领域的热潮。无人驾驶…

数学建模算法与应用 第14章 综合评价与决策方法

目录 14.1 层次分析法&#xff08;AHP&#xff09; Matlab代码示例&#xff1a;层次分析法权重计算 14.2 模糊综合评价法 Matlab代码示例&#xff1a;模糊综合评价法 14.3 灰色关联分析法 Matlab代码示例&#xff1a;灰色关联分析 14.4 主成分分析法&#xff08;PCA&…

SAP HCM 并发后台作业,解决考勤评估慢问题

这几天遇到刷卡分离程序需要跑很长时间&#xff0c;严重影响后面的时间评估与推送SucessFactors的考勤异常信息&#xff0c;下图是刷卡分离程序耗时时间&#xff0c;16个小时 记得原来算几万员工工资的时候SAP提供一个标准的并发后台程序RPCS0000&#xff0c;就是核算几万人的工…

MySQL 的数据类型

1.整数类型 1.1 tinyint tinyint 为小整数类型&#xff0c;存储空间为1个字节&#xff08;8位&#xff09;&#xff0c;有符号范围-128 ~ 127&#xff0c;无符号范围 0 ~ 255,此类型通常在数据库中表示类型的字段&#xff0c;如某一字段 type 表示学科,其中 “type1” 表示语文…

Fetch 与 Axios:JavaScript HTTP 请求库的详细比较

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

一起体验AI动手实验,OceanBase 2024 年度发布会精彩预告

2024年OceanBase年度发布会将于10月23日在北京望京凯悦酒店举行。此次大会围绕“不止于记录”的主题&#xff0c;共同探讨当前数据库领域的前沿话题&#xff0c;包含主论坛、分论坛、AI 动手实训营、开源技术交流会等多个环节&#xff0c;诚邀全国各地的企业和开发者共同参与&a…

系统架构设计师考试背记精要

1、架构的本质&#xff1a; &#xff08;1&#xff09;软件架构为软件系统提供了一个结构、行为和属性的高级抽象。&#xff08;2&#xff09;软件架构风格是特定应用领域的惯用模式&#xff0c;架构定义一个词汇表和一组约束。 2、数据流风格&#xff1a;适合于分阶段做数据处…

记录使用appium+夜神模拟器测试多设备时selenium和appium版本不兼容带来的问题

记录使用appium夜神模拟器测试多设备时selenium和appium版本不兼容带来的问题 好不容易解决了selenium和appium的版本冲突问题&#xff08;导致&#xff1a;AttributeError: ‘NoneType’ object has no attribute to_capabilities’异常发生&#xff09; 第二天运行代码发现…

24/10/12 算法笔记 NiN

LeNet、AlexNet和VGG都有一个共同的设计模式&#xff1a;通过一系列的卷积层与汇聚层来提取空间结构特征&#xff1b;然后通过全连接层对特征的表征进行处理。 AlexNet和VGG对LeNet的改进主要在于如何扩大和加深这两个模块。 或者&#xff0c;可以想象在这个过程的早期使用全连…

D35【python 接口自动化学习】- python基础之输入输出与文件操作

day35 文件合并 学习日期&#xff1a;20241012 学习目标&#xff1a;输入输出与文件操作&#xfe63;-47 如何使用python合并多个文件&#xff1f; 学习笔记&#xff1a; 合并文件需求分析 合并两个文件 代码实现 # 合并两个文件 with open(demo1.txt) as f1:file_data_1f…

Clickhouse 安装部署说明手册

Clickhouse 安装部署说明手册 准备工作 操作系统 CentOS Linux release 7.5.1804 详细信息&#xff1a; LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:pr…

【LeetCode】动态规划—95. 不同的二叉搜索树 II(附完整Python/C++代码)

动态规划—95. 不同的二叉搜索树 II 题目描述前言基本思路1. 问题定义二叉搜索树的性质&#xff1a; 2. 理解问题和递推关系递归构造思想&#xff1a;状态定义&#xff1a;递推公式&#xff1a;终止条件&#xff1a; 3. 解决方法递归 动态规划方法&#xff1a;伪代码&#xff…

Linux高级编程_32_磁盘映射

文章目录 磁盘映射相关函数mmap函数作用&#xff1a; munmap函数作用&#xff1a; truncate 函数作用&#xff1a; 语法&#xff1a;使用步骤&#xff1a; 磁盘映射 概述&#xff1a; > 存储映射 I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。…

Excel中Ctrl+e的用法

重点&#xff1a;想要使用ctrle&#xff0c;前提是整合或拆分后的结果放置的单元格必须和被提取信息的单元格相邻&#xff0c;且被提取信息的单元格也必须相连。 下图为错误示例 这样则可以使用ctrle 1、信息整合 2、提取信息 3、添加符号 4、信息顺序调换 5、数字提取 crtle还…

AI测试之 TestGPT

如今最火热的技术莫非OpenAI的ChatGPT莫属&#xff0c;AI技术也在很多方面得到广泛应用。今天我们要介绍的TestGPT就是一个软件测试领域中当红的应用。 TestGPT是什么&#xff1f; TestGPT是一家总部位于以色列特拉维夫的初创公司 CodiumAI Ltd.&#xff0c;发布的一款用于测…