vue.js - Vue中的自动onLoad计数器
问题描述
我对 Vue 很陌生。我想要做的是.. 加载 HTML 时,计时器将每秒自动开始计数。我的代码已经显示在下面了,我从 {{ counter }} 得到的总是 0。它根本不算数。请任何人给我一些建议。提前致谢。
在 HTML 中,
<div id="app">
<h3>You have opened this page for {{ counter }} seconds.</h3>
</div>
在 JS 中,
const app = new Vue({
el: '#app',
data: { counter: 0 },
computed: {
timer: function() { setInterval(this.tikTok, 1000); },
tikTok: function() { ++this.counter; }
}
});
解决方案
您的代码有两个问题,但幸运的是,它们可以很容易地解决:
问题 1:处理程序this
中的词汇setInterval()
当您使用setInterval(this.tikTok, 1000);
时,该tikTok
方法会丢失对词汇的引用this
(即您的 VueJS 应用程序)。要解决此问题,您可以:
- 使用 ES6 箭头函数,即
setInterval(() => this.tikTok(), 1000);
- 或用于
.bind(this)
传递上下文,即setInterval(this.tikTok.bind(this), 1000);
问题 2:timer
并且tikTok
应该是方法,而不是计算道具
两者都不应该是计算的道具:它们永远不会被调用timer
。tikTok
相反,您应该简单地将它们定义为methods
,然后timer
在安装和渲染组件时调用:
const app = new Vue({
el: '#app',
data: { counter: 0 },
methods: {
timer: function() { setInterval(this.tikTok, 1000); },
tikTok: function() { ++this.counter; }
},
mounted: function() {
this.$nextTick(() => {
this.timer();
});
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<h3>You have opened this page for {{ counter }} seconds.</h3>
</div>
推荐阅读
- apache-kafka - Zookeeper zNode 通过 Kerberos 访问
- pandas - Pandas-根据前一行值的总和创建列
- c - 如何阅读/理解 bpf 内核验证程序分析以调试错误?
- image - JPEGSetupEncode:RowsPerStrip 必须是 8 的倍数,因为使用枕头保存 tif 时出现 JPEG 错误
- javascript - 使用 XPATH 获取元素字体颜色的 Javascript 命令
- android - 在 react-native android build 中找不到 expo-gl-cpp 的变体
- java - 如何使用 iText.layout 调整 pdf 中的图像大小
- kubernetes - 如何在每个节点上启动一个 Pod,而不在集群中所有节点的子组上使用 daemonset?
- docker - NGINX 指向不同的 docker compose 容器
- php - 在产品存档的侧边栏小部件中显示 Woocommerce 标签