上代碼:
<template>
<span :class="commonClass" :style="commonStyle">
<span :class="selfClass" :style="selfStyle" :id="countId">{{ initCount }}</span>
</span>
</template>
<script>
import CountUp from 'countup'
export default {
data () {
return {
count: {},
countId: 'count' + parseInt(Math.random() * 1000000)
}
},
props: {
// 公用的class
commonClass: {
type: String,
default: ''
},
// 公用的style
commonStyle: {
type: Object,
default: () => {
return {
fontSize: '30px',
color: '#dc9387'
}
}
},
// 私有的class
selfClass: {
type: String,
default: ''
},
// 私有的style
selfStyle: {
type: Object
},
// 初始的默認(rèn)值
initCount: {
type: Number,
default: 0
},
// 舊值
oldValue: {
type: Number,
default: 0
},
// 新值
newValue: {
type: Number,
default: 0
},
// 保留小數(shù)位數(shù)
decimals: {
type: Number,
default: 0
},
// 完整動(dòng)畫過渡的時(shí)間,單位秒
duration: {
type: Number,
default: 2
},
// 是否線性過渡變化,false為是
useEasing: {
type: Boolean,
default: false
},
// 是否每三位數(shù)字用符號(hào)標(biāo)識(shí)
useGrouping: {
type: Boolean,
default: true
},
// 標(biāo)識(shí)的符號(hào)
separator: {
type: String,
default: ','
},
// 小數(shù)的符號(hào)
decimal: {
type: String,
default: ','
},
// 前置展示的文字
prefix: {
type: String,
default: ''
},
// 后置展示的文字
suffix: {
type: String,
default: ''
},
// 延遲開始過渡動(dòng)畫時(shí)間,單位毫秒
delay: {
type: Number,
default: 0
}
},
methods: {
},
mounted () {
this.$nextTick(() => {
setTimeout(() => {
this.count = new CountUp(this.countId, this.oldValue, this.newValue, this.decimals, this.duration, {
useEasing: this.useEasing,
useGrouping: this.useGrouping,
separator: this.separator,
decimal: this.decimal,
prefix: this.prefix,
suffix: this.suffix
});
if (!this.count.error) {
this.count.start();
} else {
??console.error(this.count.error);
}
}, this.delay)
})
},
watch: {
'newValue' (val) {
this.count.update(val)
}
}
}
</script>
打開頁面數(shù)據(jù)展示倒是沒什么問題,但是一直報(bào)錯(cuò)Error in callback for watcher "newValue": "TypeError: this.count.update is not a function"
這是為什么?
另:現(xiàn)在要做的效果是一個(gè)接口返回所有數(shù)據(jù)復(fù)用幾次這個(gè)組件,然后有各自的延遲,但是我這么寫實(shí)際測(cè)了下只有第一次是有延遲的,等到第二次調(diào)接口返回?cái)?shù)據(jù),所有歌計(jì)數(shù)都同時(shí)開始改變了,這該怎么寫?
@travins @MiIIer 首先謝謝兩位伙伴的指點(diǎn)!既然問題已經(jīng)解決了,我就說說與問題無關(guān)的、也是初學(xué)者經(jīng)常出錯(cuò)的話題。
所有的生命周期鉤子自動(dòng)綁定 this 上下文到實(shí)例中,因此你可以訪問數(shù)據(jù),對(duì)屬性和方法進(jìn)行運(yùn)算。這意味著 你不能使用箭頭函數(shù)來定義一個(gè)生命周期方法 (例如 created: () => this.fetchTodos())。這是因?yàn)榧^函數(shù)綁定了父上下文,因此 this 與你期待的 Vue 實(shí)例不同, this.fetchTodos 的行為未定義。
而生命周期鉤子內(nèi)部的箭頭函數(shù)相當(dāng)于匿名函數(shù),并且簡化了函數(shù)定義??瓷先ナ悄涿瘮?shù)的一種簡寫,但實(shí)際上,箭頭函數(shù)和匿名函數(shù)有個(gè)明顯的區(qū)別:箭頭函數(shù)內(nèi)部的this是詞法作用域,由上下文確定。此時(shí)this在箭頭函數(shù)中已經(jīng)按照詞法作用域綁定了。很明顯,使用箭頭函數(shù)之后,箭頭函數(shù)指向的函數(shù)內(nèi)部的this已經(jīng)綁定了外部的vue實(shí)例了。
第一點(diǎn)是'newValue'引號(hào)問題;
第二點(diǎn)是watch那個(gè)this.count執(zhí)行次序在setTimeout之后,所以首次執(zhí)行并沒有new CountUp成功,解決方法是要么忽略報(bào)錯(cuò)并不影響使用,要么在watch那里直接再new一次CountUp取得里面的update方法,這個(gè)應(yīng)該是iview admin里面封裝的一個(gè)組建,用它的腳手架并不會(huì)報(bào)錯(cuò),這點(diǎn)還得請(qǐng)iview作者Aresn大神來分析了。
之前的方法有點(diǎn)問題,還有一個(gè)辦法是在watch那里寫個(gè)延遲
setTimeout(()=>{
this.count.update(endVal);
},this.delay+10)北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。