javascript - 使用 vue.js 和 moment.js 创建倒计时
问题描述
我正在使用 vue.js 和 moment.js 创建一个计时器,我只使用分钟和秒,我的代码应该可以工作,但我没有得到想要的结果:
var app = new Vue({
el: '#app',
data: {
date: moment(60 * 10 * 1000)
},
computed: {
time: function(){
return this.date.format('mm:ss');
}
},
mounted: function(){
var aa = this.date;
setInterval(function(){
aa.subtract(1, 'seconds');
}, 1000);
}
});
<script src="https://momentjs.com/downloads/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<div id="app">{{ time }}</div>
解决方案
正如@Phil 指出的那样,该问题是由反应性问题引起的。subtract
只需更新一些属性然后返回原始对象。
所以我们应该用一个新的对象来替换旧的。(可能存在一种使用Vue.set
或vm.$set
更新矩对象属性的方法,希望有人能指出。)
就像下面的演示:
var app = new Vue({
el: '#app',
data: {
date: moment(60 * 10 * 1000)
},
computed: {
time: function(){
return this.date.format('mm:ss');
}
},
mounted: function(){
setInterval(() => {
this.date = moment(this.date.subtract(1, 'seconds'))
}, 1000);
}
});
<script src="https://momentjs.com/downloads/moment.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<div id="app">{{ time }}</div>
推荐阅读
- java - 使用 spring boot 暴露 Rpc Style WS
- javascript - 尽管通过了相关状态,但 Typeahead 加载程序仍无法正常工作
- c++ - PDF 中的自定义字符集表
- google-sheets - 如何在 googlesheets 中使用 ARRAYFORMULA(Regexextract) 从不同格式的 URL 中获取工作表 ID
- python - 如何从欧洲央行网站上抓取正确的元素
- r - 如何运行由 R 中的部分定义的代码的特定部分
- php - NGINX + PHP-FPM - 在while循环期间如果断开连接退出脚本
- c++ - 将字符串的长度分配给整数:C++
- python - OPC UA使用字符串identifier_type python获取变量节点
- css - react.js 占位符转换?