我用Vue.js创建了一个倒计时,但是我无法显示我得到的值 . 我有两个组件,我已经阅读了Vue的单个文件组件指南,但我似乎并不明白我做错了什么 . 在控制台中,我收到以下错误:
[Vue警告]:无效道具:道具“日期”的类型检查失败 . 预期的数字,得到字符串 .
虽然在我的代码中它被定义为数字 .
app.js
import './bootstrap.js';
import Echo from 'laravel-echo';
import Vue from 'vue';
import CurrentTime from './components/CurrentTime';
import Bitbucket from './components/Bitbucket';
import InternetConnection from './components/InternetConnection';
import LastFm from './components/LastFm';
import PackagistStatistics from './components/PackagistStatistics';
import RainForecast from './components/RainForecast';
import Placeholder from './components/Placeholder';
import Youtube from './components/Youtube';
import ProjectCountdown from './components/ProjectCountdown';
import Countdown from './components/Countdown';
Vue.component('countdown', Countdown);
new Vue({
el: '#dashboard',
components: {
CurrentTime,
InternetConnection,
Bitbucket,
LastFm,
PackagistStatistics,
RainForecast,
Placeholder,
Youtube,
ProjectCountdown,
Countdown
},
created() {
this.echo = new Echo({
broadcaster: 'pusher',
key: window.dashboard.pusherKey,
cluster: 'eu',
encrypted: true
});
},
});
ProjectCountdown.vue
<template>
<div id="dashboard">
<Countdown date="March 20, 2017 12:00"></Countdown>
{{days}}
</div>
</template>
<script>
import Grid from './Grid';
import Vue from 'vue';
import Countdown from './Countdown';
export default {
components: {
Grid,
Countdown,
},
props: {
grid: {
type: String,
},
},
data() {
return {
}
}
}
// Vue.filter('two_digits', function (value) {
// if(value.toString().length <= 1)
// {
// return "0" + value.toString()
// }
// return value.toString();
// });
</script>
Countdown.vue
<template>
<div>
{{ seconds }}
</div>
</template>
<script>
import Vue from 'vue';
export default {
props: {
date: {
type: Number,
coerce: str => Math.trunc(Date.parse(str) / 1000)
},
},
data() {
return {
now: Math.trunc((new Date()).getTime() / 1000)
}
},
ready() {
window.setInterval(() => {
this.now = Math.trunc((new Date()).getTime() / 1000);
},1000);
},
computed: {
seconds() {
return (this.date - this.now) % 60;
},
minutes() {
return Math.trunc((this.date - this.now) / 60) % 60;
},
hours() {
return Math.trunc((this.date - this.now) / 60 / 60) % 24;
},
days() {
return Math.trunc((this.date - this.now) / 60 / 60 / 24);
},
},
}
</script>
3 回答
正如错误所说,它来自这条线:
您正在传递
date
作为字符串,而在道具中验证它是一个数字 . 这是您的验证:我认为在新项目中你使用的是vuejs2,其中强制选项是removed . 如上所述here您可以使用如下的计算属性:
您现在可以使用
modifiedDate
而不是date
.Vue没有错 . 问题出在您的代码中 .
您将日期声明为数字(顺便说一句 . 为什么?)然后您传递字符串...
宣言:
用法:
<Countdown date="March 20, 2017 12:00"></Countdown>
使用数字来存储日期并不是最好的想法(它可以工作,但有更好的方法) .
VueJs 2 Countdown Component - > ** JSBin ** .
这是网址:http://jsbin.com/tapuyicefo/edit?html,css,js,output
index.html
css
Javascript
Javascript - alternative - if you want to stop counter after he reaches contdown date
Original script VueJS v1 - Github