計算屬性和 方法和 偵聽器

2021-10-24 12:52:11 字數 2324 閱讀 9144

一.計算屬性:

我們在開發當中通常會遇到這種情況,需要返回的是兩個變數的計算值 ,那我們就在computed屬性中去定義計算的方法:

eg:我們現在有兩個變數:fristname 和 lastname 。我們想要頁面輸出的是fullname 全名:

當更改age的時候, fullname 函式不執行;

只有當更改 firstname或 lastname fullname才會執行

data()

},computed:

},

ok,在頁面上就顯示fullname的值了。(當我們用插值表示式,表示式的值會先在data中找,找不到再去計算屬性computed中找)

效果:hani wen

當更改age的時候, fullname 函式執行, 這樣就增加了**冗餘,瀏覽器執行效能降低;

當更改fristname的時候, fullname 函式仍執行。

methods:

}

在頁面上呼叫方法:}

}
效果:

hani wen

但是方法和計算屬性有什麼區別呢?

方法沒有快取機制,計算屬性的效能更好。

先初始化資料:

data()

}

監聽fristname 和lastname的變化,一旦有變化則觸發:

watch:,

lastname:function(),

效果:

hani wen

雖然監聽的方法能夠實現計算的結果,也有快取的機制,但是看起來冗餘。

這三種綜合來看,涉及到計算,還是用computed比較好。

在computed中可以將fullname 定義成乙個物件,在物件中定義get 和set 的方法。

computed:,

set:function(value)

}},

計算屬性的特點

當我們第一次使用計算屬性的時候,會執行計算屬性並進行計算,然後將計算屬性結果快取起來

後續我們在去使用計算屬性的時候,如果計算屬性使用的資料沒有發生改變,那麼就會直接讀取快取結果,不會重新計算

注意:每次計算的結果快取的時候。都會重新建立乙個便令儲存結果

偵聽器特點

當定義乙個偵聽器的時候,如果偵聽器與data的屬性同名,當屬性的值發生改變的時候,偵聽器就會被觸發執行

注意:乙個偵聽器對應data中的乙個屬性,當屬性發生變化時觸發偵聽器執行

分析結果

從上面的特點來說,我們可以得出結論:

1).計算屬性的應用場景是計算的內容需要依賴多個屬性的情況

偵聽器的應用場景是計算的內容依賴乙個屬性的情況

2).計算屬性快取結果時每次都會重新建立變數

而偵聽器是直接計算不會建立變數儲存結果

也就意味著,資料如果會反覆的發生變化,計算很多次的情況下,計算屬性的開銷將會更大,也就意味著這種情況不適合使用計算屬性,適合使用偵聽器

那麼,如果乙個資料反覆會被使用,但是它計算依賴的內容很少發生變化的情況下,計算屬性會快取結果,就更加適合這種情況。

3).computed的結果是通過return返回的,而watch不需要return

4).watch中的引數可以得到偵聽屬性改變的最新結果,而computed函式沒有這種引數

補充:watch只會監聽資料的值是否發生改變,而不會監聽位址的變化,如果需要監聽引用型別的資料變化,需要深度監聽:obj:,deep:true}------用handler+deep的方式進行深度監聽。

在特殊的情況下(更改陣列中的資料時,陣列已經更改,但是檢視沒有更新),watch無法監聽陣列的變化,更改陣列必須要用splice()或者$set。

結論:我們在計算開銷比較大(計算次數多或者非同步處理)的時候,會使用偵聽器watch來得到計算結果。

而其他情況建議使用計算屬性computed,因為快取節省多次計算的效能。

計算屬性 方法和偵聽器

doctype html en utf 8 計算屬性 方法和偵聽器 title vue.js script head root div newvue 計算屬性 computed script body html 計算屬性在使用的時候會有乙個快取,其依賴的data,在沒有發生變化的時候,計算屬性就不會...

計算屬性和偵聽器

1 計算屬性快取 vs 方法 將乙個函式定義為計算屬性和方法得到的結果是相同的。但不同的是計算屬性是基於它們的依賴進行快取的,只是在相關依賴發生改變時才會重新求值。方法 methods 計算屬性 computed 2 計算屬性 vs 偵聽屬性 偵聽屬性 觀察和響應vue例項上的資料變動 watch ...

計算屬性和偵聽器

div id example p original message p p computed reversed message p div var vm new vue computed 結果 original message hello computed reversed message olle...