国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

Vue.js教程之計算屬性

2024-05-06 16:32:50
字體:
供稿:網(wǎng)友

Vue.js 的內(nèi)聯(lián)表達(dá)式非常方便,但它最合適的使用場景是簡單的布爾操作或字符串拼接。如果涉及更復(fù)雜的邏輯,你應(yīng)該使用計算屬性。

計算屬性是用來聲明式的描述一個值依賴了其它的值。當(dāng)你在模板里把數(shù)據(jù)綁定到一個計算屬性上時,Vue 會在其依賴的任何值導(dǎo)致該計算屬性改變時更新 DOM。這個功能非常強大,它可以讓你的代碼更加聲明式、數(shù)據(jù)驅(qū)動并且易于維護。

通常情況下,使用計算屬性會比使用過程式的$watch回調(diào)更合適。比如下面的例子:

<div id="demo">{{fullName}}</div>var vm = new Vue({data: {firstName: 'Foo',lastName: 'Bar',fullName: 'Foo Bar'}})vm.$watch('firstName', function (val) {this.fullName = val + ' ' + this.lastName})vm.$watch('lastName', function (val) {this.fullName = this.firstName + ' ' + val})

上面的代碼是過程式的,并且比較笨重。對比一下計算屬性的版本:

var vm = new Vue({el:'#demo',data: {firstName: 'Foo',lastName: 'Bar'},computed: {fullName: function () {return this.firstName + ' ' + this.lastName}}})

是不是感覺好多了?另外,你還可以為計算屬性提供一個 setter:

computed: {fullName: {// getterget: function () {return this.firstName + ' ' + this.lastName},// setterset: function (newValue) {var names = newValue.split(' ')this.firstName = names[0]this.lastName = names[names.length - 1]}}}

計算屬性緩存

在 0.12.8 之前,計算屬性僅僅體現(xiàn)為一個取值的行為 —— 每次你訪問它的時候,getter 都會重新求值。在 0.12.8 中對此做了改進 —— 計算屬性的值會被緩存,只有在其某個反應(yīng)依賴改變才會重新計算。

設(shè)想我們有一個開銷很大的計算屬性 A,它需要循環(huán)一個大數(shù)組并且完成很多運算。并且我們還有一個依賴 A 的計算屬性。如果沒有緩存,我們對 A 的 getter 不必要的過度調(diào)用就會導(dǎo)致潛在的性能問題。而有了緩存,A 的值會被緩存起來,除非其依賴發(fā)生了變化,這樣訪問它再多次也不會導(dǎo)致大量的不必要運算了。

然而,我們還是應(yīng)該理解什么會被視為“反應(yīng)式依賴”:

var vm = new Vue({data: {msg: 'hi'},computed: {example: {return Date.now() + this.msg}}})

在上面的例子中,計算屬性依賴 vm.msg。因為這是一個在 Vue 實例中被觀察的數(shù)據(jù)屬性,那么它就被視為了一個反應(yīng)式依賴。無論何時 vm.msg 改變,vm.example 的值都會被重新計算。
然而,Date.now()并不是反應(yīng)式依賴,因為它沒有和 Vue 的數(shù)據(jù)觀察系統(tǒng)發(fā)生任何關(guān)系。因此,當(dāng)你在程序中訪問vm.example時,你會發(fā)現(xiàn)除非vm.msg觸發(fā)了一次重新計算,否則時間戳始終是相同的值。

有的時候你需要保留簡單獲取數(shù)據(jù)的模式,每次你訪問 vm.example 的時候都希望觸發(fā)重新計算。從 0.12.11 開始,你可以為一個特殊的計算屬性開關(guān)緩存支持:

computed: {example: {cache: false,get: function () {return Date.now() + this.msg}}}

現(xiàn)在,每次你訪問 vm.example 的時候,時間戳都會及時更新。然而,要注意這只發(fā)生在 JavaScript 程序內(nèi)部訪問的時候,數(shù)據(jù)綁定還是依賴驅(qū)動的。當(dāng)你在模板中綁定一個 {{example}} 的計算屬性時,DOM 只會在反應(yīng)式依賴改變時才會更新。

以上所述是小編給大家介紹的Vue.js教程之計算屬性,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對VeVb武林網(wǎng)網(wǎng)站的支持!

 


注:相關(guān)教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 瓦房店市| 涞水县| 南和县| 民权县| 固安县| 高雄县| 安福县| 大竹县| 林州市| 精河县| 双城市| 文山县| 绥江县| 吴旗县| 蒲城县| 白玉县| 抚松县| 鄯善县| 青阳县| 石首市| 景宁| 成武县| 屏东县| 棋牌| 鄂尔多斯市| 丹东市| 鄱阳县| 乡城县| 姜堰市| 建宁县| 嘉峪关市| 将乐县| 邯郸市| 临漳县| 仁怀市| 湟源县| 德格县| 石城县| 郸城县| 博白县| 隆回县|