日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > vue >内容正文

vue

vue修改计算属性的值_Vue语法高级之计算属性和侦听器

發(fā)布時(shí)間:2024/7/23 vue 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue修改计算属性的值_Vue语法高级之计算属性和侦听器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

????計(jì)算屬性和偵聽(tīng)器都可以監(jiān)聽(tīng)到data區(qū)數(shù)據(jù)的變化,當(dāng)數(shù)據(jù)變化時(shí)可以觸發(fā)方法的調(diào)用,從而在方法內(nèi)部可以進(jìn)行相應(yīng)的邏輯處理。

????計(jì)算屬性的語(yǔ)法格式是:computed: {}

????偵聽(tīng)器的語(yǔ)法格式是:watch: {}

一、計(jì)算屬性

????計(jì)算屬性一般是為了簡(jiǎn)化模板中的內(nèi)容,讓模板中內(nèi)容盡可能簡(jiǎn)潔。如果我們將太多的邏輯寫(xiě)在模板中,模板將會(huì)變得難以維護(hù)。

????下面舉一反例,我們將字符串逆序的邏輯寫(xiě)在模板中。

<div id="app"> <div id="example"> {{ message.split('').reverse().join('') }} div>div><script> let vm = new Vue({ el: '#app', data: { message: 'Hello World' } })script>

????如果我們將字符串逆序的邏輯抽取到計(jì)算屬性中,模板會(huì)更清晰,改造如下:

<div id="app"> <div id="example"> {{ resMsg }} div>div><script> let vm = new Vue({ el: '#app', data: { message: 'Hello World' }, computed: { resMsg() { return this.message.split('').reverse().join('') } } })script>

????我們?cè)赾omputed中聲明了一個(gè)計(jì)算屬性resMsg,通過(guò)這個(gè)屬性來(lái)接收變量message逆序之后的值。

????火眼金睛的你應(yīng)該發(fā)現(xiàn)了resMsg更像一個(gè)方法,而不像一個(gè)屬性。這是因?yàn)橛?jì)算屬性的簡(jiǎn)寫(xiě)方式導(dǎo)致,不是它的原始樣子,原始樣子如下:

computed: { resMsg: { get() { return this.message.split('').reverse().join('') } } }

????計(jì)算屬性默認(rèn)只有g(shù)et方法,當(dāng)只有g(shù)et方法時(shí),就可以進(jìn)行簡(jiǎn)寫(xiě)。

????當(dāng)然,如果有需要,我們可以為計(jì)算屬性提供它的set方法,set方法在計(jì)算屬性的值被修改時(shí)自動(dòng)調(diào)用。這個(gè)特性一般在前后端交互時(shí),數(shù)據(jù)格式不一致時(shí)會(huì)用到。比如時(shí)間、金錢(qián)等等在前后端的格式就通常不一樣。

????我們以錢(qián)為例來(lái)說(shuō)明一下set方法的應(yīng)用場(chǎng)景。

????通常情況下,后端為了避開(kāi)浮點(diǎn)數(shù)存儲(chǔ)不精確的問(wèn)題,會(huì)以分為單位進(jìn)行整數(shù)存儲(chǔ)。然而,前端在展示的時(shí)候,通常是以元為單位,這時(shí)兩個(gè)單位就不一致,它們相差100倍。

????現(xiàn)在前端通過(guò)接口調(diào)用,拿到的錢(qián)是100分,賦值給cents變量,該值要轉(zhuǎn)化成元在頁(yè)面上展示,我們就可以聲明一個(gè)yuan的計(jì)算屬性去實(shí)現(xiàn)。當(dāng)計(jì)算屬性yuan被修改時(shí),對(duì)應(yīng)的分又要賦值到cents變量上,這時(shí)候set方法就派上用場(chǎng)了,代碼如下

<div id="app"> 分:{{cents}} <hr> 元:{{yuan}} <hr> 改變?cè)?#xff1a;<input type="text" v-model="yuan">div><script> let vm = new Vue({ el: '#app', data: { cents: 100 }, computed: { yuan: { get: function () { return this.cents / 100; }, set: function (newVal) { this.cents = newVal * 100 } } } })script>

????我們就通過(guò)set方法自動(dòng)被調(diào)用的特性,在方法內(nèi)部,將元轉(zhuǎn)變成分,并賦值給cents變量。

????通常情況下,我們只會(huì)用到get方法,所以簡(jiǎn)寫(xiě)形式居多,但不要把它當(dāng)做方法。它跟方法是不一樣的,方法的每次調(diào)用,方法內(nèi)部邏輯都會(huì)執(zhí)行一遍。計(jì)算屬性卻不會(huì),它具備基于依賴(lài)的緩存能力。下面例子來(lái)證實(shí)這個(gè)現(xiàn)象。

<div id="app"> <div>{{reverseMsg}}div> <div>{{reverseMsg}}div> <hr> <div>{{reverseStr(msg)}}div> <div>{{reverseStr(msg)}}div>div><script> let vm = new Vue({ el: '#app', data: { msg: 'Hello' }, computed: { reverseMsg() { console.log('computed') return this.msg.split('').reverse().join('') } }, methods: { reverseStr() { console.log('method') return this.msg.split('').reverse().join('') } } })script>

????上面代碼中,計(jì)算屬性在模板中使用了兩次,方法調(diào)用也使用了兩次,我們查看打印發(fā)現(xiàn)

????方法中的打印語(yǔ)句執(zhí)行了兩次,而計(jì)算屬性中的打印語(yǔ)句卻只執(zhí)行了一次。這就驗(yàn)證了,計(jì)算屬性的簡(jiǎn)寫(xiě)形式雖然長(zhǎng)得跟方法一模一樣,但它確實(shí)不是方法。

二、偵聽(tīng)器

????偵聽(tīng)器也可以監(jiān)聽(tīng)到data中的數(shù)據(jù)變化,當(dāng)data中某個(gè)變量的數(shù)據(jù)發(fā)生變化時(shí),對(duì)應(yīng)的偵聽(tīng)器方法就會(huì)被執(zhí)行,偵聽(tīng)器的方法名必須跟被偵聽(tīng)的變量名一樣。

<div id="app"> <label> 名: <input type="text" v-model="firstName"> label> <br> <label> 姓: <input type="text" v-model="lastName"> label> <br> {{fullName}}div><script> let vm = new Vue({ el: '#app', data: { firstName: 'Jim', lastName: 'Green', fullName: 'Jim Green' }, watch: { firstName(val) { console.log('firstName has changed') this.fullName = val + ' ' + this.lastName }, lastName(val) { console.log('lastName has changed') this.fullName = this.firstName + ' ' + val } } })script>

??? firstName(val)就是監(jiān)聽(tīng)firstName變化時(shí)被調(diào)用的函數(shù),lastName(val)就是監(jiān)聽(tīng)lastName變化時(shí)被調(diào)用的函數(shù)。運(yùn)行頁(yè)面如下:

????當(dāng)我們修改firstName的值時(shí),firstName(val)方法就會(huì)被調(diào)用,并且新值會(huì)傳遞給val變量,我們利用新值可以去更新fullName變量。

????偵聽(tīng)器的應(yīng)用場(chǎng)景通常是數(shù)據(jù)變化時(shí)需要執(zhí)行異步操作開(kāi)銷(xiāo)較大的操作。

總結(jié)

????計(jì)算屬性和偵聽(tīng)器有相似之處,又有不同之處。相似之處是,它們都可以監(jiān)聽(tīng)到數(shù)據(jù)的變化,從而執(zhí)行自己的處理邏輯。但是它們的應(yīng)用場(chǎng)景是不一樣的,平常開(kāi)發(fā)中,計(jì)算屬性使用頻率更高。

總結(jié)

以上是生活随笔為你收集整理的vue修改计算属性的值_Vue语法高级之计算属性和侦听器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。