亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

vue 核心之一 計(jì)算屬性computed 和偵聽屬性watch

Galence / 731人閱讀

摘要:我們可以改寫這個(gè)例子計(jì)算屬性的指向?qū)嵗覀兛梢詫⑼缓瘮?shù)定義為一個(gè)方法而不是一個(gè)計(jì)算屬性。然而,不同的是計(jì)算屬性是基于它們的響應(yīng)式依賴進(jìn)行緩存的。這就意味著只要還沒有發(fā)生改變,多次訪問計(jì)算屬性會(huì)立即返回之前的計(jì)算結(jié)果,而不必再次執(zhí)行函數(shù)。

對(duì)于很多初學(xué)vue的初級(jí)前端開發(fā)工程而言,在了解了vue雙向數(shù)據(jù)綁定v-model、模板語法、實(shí)例創(chuàng)建等基礎(chǔ)的知識(shí)之后,對(duì)于一些復(fù)雜的數(shù)據(jù)操作還無從下手。

首先,什么是計(jì)算屬性?

在vue官方文檔中,對(duì)計(jì)算屬性的初衷是由于模板內(nèi)部的表達(dá)式雖然已經(jīng)很便利,但是它只能進(jìn)行簡單的運(yùn)算,而且面對(duì)復(fù)雜邏輯的時(shí)候,模板過重并且難以維護(hù),所以官方給的建議是對(duì)于任何復(fù)雜的邏輯都應(yīng)當(dāng)使用計(jì)算屬性。

那么,我們?yōu)槭裁匆褂糜?jì)算屬性呢?它到底有什么好處,可以給我們帶來哪些便利呢?
我們一起來看下以下代碼

{{ message.split("").reverse().join("") }}
var vm = new Vue({ el: "#example", data: { message: "Hello" } })

對(duì)于初學(xué)著來說,如果要拆分對(duì)message進(jìn)行處理或者其他的復(fù)雜操作,我們可能會(huì)想到上面這種形式去處理,但是如果說,要實(shí)行for循環(huán)呢?

有人會(huì)說,我可以在`methods: {
reversedMessage: function () {

return this.message.split("").reverse().join("")

}
}`
這樣寫,
但是,如果我需要這個(gè)message動(dòng)態(tài)的去改變呢?
為了適應(yīng)復(fù)雜的業(yè)務(wù)邏輯,計(jì)算屬性cumputed就橫空出世了,雖然cumputed和methods可以完成同樣的事情,但是copmputed是基于依賴進(jìn)行緩存的,然而methods需要每一次的去進(jìn)行計(jì)算。
我們可以改寫這個(gè)例子

{{ reversedMessage}}"

var app = new Vue({ el: "#app", data: { message: "Hello" }, computed: { // 計(jì)算屬性的 getter reversedMessage: function () { // `this` 指向 app 實(shí)例 return this.message.split("").reverse().join("") } } })

我們可以將同一函數(shù)定義為一個(gè)方法而不是一個(gè)計(jì)算屬性。兩種方式的最終結(jié)果確實(shí)是完全相同的。然而,不同的是計(jì)算屬性是基于它們的響應(yīng)式依賴進(jìn)行緩存的。只在相關(guān)響應(yīng)式依賴發(fā)生改變時(shí)它們才會(huì)重新求值。這就意味著只要 message 還沒有發(fā)生改變,多次訪問 reversedMessage 計(jì)算屬性會(huì)立即返回之前的計(jì)算結(jié)果,而不必再次執(zhí)行函數(shù)。此時(shí)你可以動(dòng)態(tài)的去修改message的值,可以動(dòng)態(tài)的看到reversedMessage再動(dòng)態(tài)的更新。

其次:計(jì)算屬性是沒有setter的,默認(rèn)的情況下只有g(shù)etter

不過你可以添加一個(gè)setter進(jìn)去。
例子:

{{ allName }}
// 用computed實(shí)現(xiàn) var vm = new Vue({ el: "#app", data: { her: "尼古拉斯趙四", he: "劉英" }, computed: { allName: function () { get: function () { return this.her+ " 的女兒是" + this.lastName }, // setter set: function (newValue) { var names = newValue.split(" ") this.her= names[0] this.he= names[names.length - 1] } } } })

現(xiàn)在運(yùn)行vm.allName時(shí),setter也會(huì)執(zhí)行,vm.her和vm.she也會(huì)被更新

Watch

雖然計(jì)算屬性很強(qiáng)大,但是面對(duì)復(fù)雜的業(yè)務(wù)需求和奇特的產(chǎn)品經(jīng)理(雖然很多時(shí)候你都想狠狠地胖揍他一頓)的時(shí)候,我們也需要一個(gè)自定義的偵聽器去檢測數(shù)據(jù)的動(dòng)態(tài)變化,當(dāng)數(shù)據(jù)進(jìn)行異步或者數(shù)據(jù)的開銷比較龐大的時(shí)候,這個(gè)時(shí)候watch就顯得比較有用了
`



點(diǎn)擊次數(shù):{{num}}


var vm = new Vue({
el: "#app",
data: {

num: 10

},
watch: {

// 監(jiān)聽數(shù)據(jù)的變化做出對(duì)應(yīng)的改變,并不會(huì)生成新的屬性
num (val) {
    if (val< 5) this.alert()
}

},
methods: {

alert () {
  alert("點(diǎn)擊次數(shù)達(dá)到"+this.number+"次啦")
},
add () {
  this.number -= 1
}

}
})`

當(dāng)你點(diǎn)擊的時(shí)候執(zhí)行add方法,改變num的值,而watch正在監(jiān)聽num的變化,此時(shí)當(dāng)num<5時(shí),即刻執(zhí)行alert方法,點(diǎn)擊次數(shù)到達(dá)了4次啦。
在我們需要依賴動(dòng)態(tài)的去改變data的值之后進(jìn)行邏輯其他邏輯操作的時(shí)候以及我們需要監(jiān)聽數(shù)據(jù)結(jié)構(gòu)層次比較高的時(shí)候可以使用deep屬性進(jìn)行深度監(jiān)聽。

好了,喜歡的朋友請(qǐng)關(guān)注下方公眾號(hào),每天不定期更新更多前沿前端技術(shù)內(nèi)容。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/104407.html

相關(guān)文章

  • vue 核心之一 計(jì)算屬性computed 偵聽屬性watch

    摘要:我們可以改寫這個(gè)例子計(jì)算屬性的指向?qū)嵗覀兛梢詫⑼缓瘮?shù)定義為一個(gè)方法而不是一個(gè)計(jì)算屬性。然而,不同的是計(jì)算屬性是基于它們的響應(yīng)式依賴進(jìn)行緩存的。這就意味著只要還沒有發(fā)生改變,多次訪問計(jì)算屬性會(huì)立即返回之前的計(jì)算結(jié)果,而不必再次執(zhí)行函數(shù)。 對(duì)于很多初學(xué)vue的初級(jí)前端開發(fā)工程而言,在了解了vue雙向數(shù)據(jù)綁定v-model、模板語法、實(shí)例創(chuàng)建等基礎(chǔ)的知識(shí)之后,對(duì)于一些復(fù)雜的數(shù)據(jù)操作還無從...

    羅志環(huán) 評(píng)論0 收藏0
  • 淺談Vue計(jì)算屬性computed的實(shí)現(xiàn)原理

    摘要:雖然計(jì)算屬性在大多數(shù)情況下更合適,但有時(shí)也需要一個(gè)自定義的偵聽器。當(dāng)某個(gè)屬性發(fā)生變化,觸發(fā)攔截函數(shù),然后調(diào)用自身消息訂閱器的方法,遍歷當(dāng)前中保存著所有訂閱者的數(shù)組,并逐個(gè)調(diào)用的方法,完成響應(yīng)更新。 雖然目前的技術(shù)棧已由Vue轉(zhuǎn)到了React,但從之前使用Vue開發(fā)的多個(gè)項(xiàng)目實(shí)際經(jīng)歷來看還是非常愉悅的,Vue文檔清晰規(guī)范,api設(shè)計(jì)簡潔高效,對(duì)前端開發(fā)人員友好,上手快,甚至個(gè)人認(rèn)為在很多...

    laznrbfe 評(píng)論0 收藏0
  • 做面試的不倒翁:淺談 Vuecomputed 實(shí)現(xiàn)原理

    摘要:當(dāng)某個(gè)屬性發(fā)生變化,觸發(fā)攔截函數(shù),然后調(diào)用自身消息訂閱器的方法,遍歷當(dāng)前中保存著所有訂閱者的數(shù)組,并逐個(gè)調(diào)用的方法,完成響應(yīng)更新。 編者按:我們會(huì)不時(shí)邀請(qǐng)工程師談?wù)動(dòng)幸馑嫉募夹g(shù)細(xì)節(jié),希望知其所以然能讓大家在面試有更出色表現(xiàn)。也給面試官提供更多思路。 showImg(https://segmentfault.com/img/bVbgYyU?w=1200&h=600); 雖然目前的技術(shù)...

    Anonymous1 評(píng)論0 收藏0
  • vue面試

    摘要:雖然計(jì)算屬性在大多數(shù)情況下更合適,但有時(shí)也需要一個(gè)自定義的偵聽器,當(dāng)需要在數(shù)據(jù)變化時(shí)執(zhí)行異步或開銷較大的操作時(shí),通過偵聽器最有用。路由的鉤子函數(shù)首頁可以控制導(dǎo)航跳轉(zhuǎn),,等,一般用于頁面的修改。 談?wù)勀銓?duì)MVVM開發(fā)模式的理解 MVVM分為Model、View、ViewModel三者。Model 代表數(shù)據(jù)模型,數(shù)據(jù)和業(yè)務(wù)邏輯都在Model層中定義;View 代表UI視圖,負(fù)責(zé)數(shù)據(jù)的展示;...

    vspiders 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<