vue 計(jì)算屬性和偵聽器的使用小結(jié)
1. 計(jì)算屬性和偵聽器
1.1 計(jì)算屬性
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script> </head> <body> <div id="app"> <p>{{ message }}</p> <p>{{ reversedMessage }}</p> </div> <script> new Vue({ el: '#app', data: { message: 'hello' }, computed: { reversedMessage: function () { return this.message.split('').reverse().join('') } /* // 相當(dāng)于 reversedMessage: { get(){ return this.message.split('').reverse().join('') } } */ } }); </script> </body> </html>
解釋:我們?cè)趯傩詂omputed中定義了計(jì)算屬性reversedMessage,這里提供的函數(shù)將作為計(jì)算屬性reversedMessage的getter函數(shù)。
1.2 setter
計(jì)算屬性默認(rèn)只有g(shù)etter,不過我們可以提供一個(gè)setter。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script> </head> <body> <div id="app"> <p>{{ message }}</p> <p>{{ reversedMessage }}</p> <input type="text" v-model="reversedMessage" /> </div> <script> new Vue({ el: '#app', data: { message: 'hello' }, computed: { reversedMessage: { get(){ return this.message.split('').reverse().join('') }, set(value){ this.message = value.split('').reverse().join('') } } } }); </script> </body> </html>
1.3 緩存
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script> </head> <body> <div id="app"> <p>{{ message }}</p> <p>{{ reversedMessage }}</p> <p>{{ reversedMessage1() }}</p> </div> <script> new Vue({ el: '#app', data: { message: 'hello' }, methods: { reversedMessage1: function(){ return this.message.split('').reverse().join('') } }, computed: { reversedMessage: function () { return this.message.split('').reverse().join('') } } }); </script> </body> </html>
注意:雖然通過計(jì)算屬性和方法,都可以達(dá)到同樣的效果,但是計(jì)算屬性是基于它們的響應(yīng)式依賴進(jìn)行緩存的。只在相關(guān)響應(yīng)式依賴發(fā)生改變時(shí)它們才會(huì)重新求值。
1.4 偵聽屬性
通過Vue實(shí)例的watch屬性可以偵聽數(shù)據(jù)的變化。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script> </head> <body> <div id="app"> <p>{{ message }}</p> <button @click="reverse=!reverse">反轉(zhuǎn)</button> </div> <script> new Vue({ el: '#app', data: { message: 'Vue', reverse: false }, watch: { // message: function(newVal, oldVal){ reverse: function(newVal){ console.log(newVal) this.message = this.message.split('').reverse().join('') } }, }); </script> </body> </html>
我們可以通過實(shí)例屬性vm.$watch達(dá)到同樣的效果。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script> </head> <body> <div id="app"> <p>{{ message }}</p> <button @click="reverse=!reverse">反轉(zhuǎn)</button> </div> <script> var vm = new Vue({ el: '#app', data: { message: 'Vue', reverse: false } }); // vm.$watch('reverse', function (newVal, oldVal) { vm.$watch('reverse', function (newVal) { console.log(newVal) this.message = this.message.split('').reverse().join('') }); </script> </body> </html>
以上就是vue 計(jì)算屬性和偵聽器的使用小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于vue 計(jì)算屬性和偵聽器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
element?實(shí)現(xiàn)導(dǎo)航欄收起展開功能及思路
這篇文章主要介紹了element?實(shí)現(xiàn)導(dǎo)航欄收起展開功能,實(shí)現(xiàn)思路先給 el-menu加上 :collapse="isCollapse" 屬性,這個(gè)屬性也是 element 上的一個(gè)參數(shù),意思為是否開啟折疊動(dòng)畫,在 data 中定義 isCollapse ,用 true 和 false 控制展開與收起,需要的朋友可以參考下2023-01-01在vue項(xiàng)目創(chuàng)建的后初始化首次使用stylus安裝方法分享
下面小編就為大家分享一篇在vue項(xiàng)目創(chuàng)建的后初始化首次使用stylus安裝方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01解決vue動(dòng)態(tài)為數(shù)據(jù)添加新屬性遇到的問題
今天小編就為大家分享一篇解決vue動(dòng)態(tài)為數(shù)據(jù)添加新屬性遇到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09vue項(xiàng)目如何實(shí)現(xiàn)Echarts在label中獲取點(diǎn)擊事件
這篇文章主要介紹了vue項(xiàng)目如何實(shí)現(xiàn)Echarts在label中獲取點(diǎn)擊事件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10整理項(xiàng)目中vue.config.js打包優(yōu)化配置方法
這篇文章主要介紹了整理項(xiàng)目中vue.config.js打包優(yōu)化,包括配置?webpack-bundle-analyzer?插件查看文件大小及配置compression-webpack-plugin?用gzip壓縮打包的文件大小,本文結(jié)合實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02