Vue中的computed屬性是計(jì)算屬性,也可以理解為是“computed field”。computed屬性實(shí)際上是一個(gè)getter函數(shù)(所以只能讀取)。
computed: { fullname: function () { return this.firstname + ' ' + this.lastname } }
可以通過computed屬性的返回值來進(jìn)行一些復(fù)雜的邏輯計(jì)算,比如數(shù)據(jù)篩選、校驗(yàn)等等。同一個(gè)computed屬性,只要關(guān)聯(lián)的響應(yīng)式依賴發(fā)生了變化,它就會(huì)重新讀取計(jì)算。
然而,在某些特殊的情況下,我們需要對(duì)computed屬性進(jìn)行賦值操作,Vue中是禁止這種操作的。因?yàn)樵赾omputed屬性的getter函數(shù)中,我們不能確認(rèn)依賴的值是否是響應(yīng)式數(shù)據(jù),如果允許賦值操作,可能會(huì)導(dǎo)致數(shù)據(jù)不響應(yīng)式。
但是,如果我們真的需要對(duì)computed屬性進(jìn)行賦值操作,可以考慮使用computed屬性中定義的setter函數(shù)。
computed: { fullname: { get: function () { return this.firstname + ' ' + this.lastname }, set: function (newvalue) { let names = newvalue.split(' ') this.firstname = names[0] this.lastname = names[1] } } }
通過定義setter函數(shù),我們就可以對(duì)computed屬性進(jìn)行賦值操作了。