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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

5.Vue 计算属性和侦听器

發布時間:2024/5/7 vue 97 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5.Vue 计算属性和侦听器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hello,我是 Alex 007,一個熱愛計算機編程和硬件設計的小白,為啥是007呢?因為叫 Alex 的人太多了,再加上每天007的生活,Alex 007就誕生了。

5.Vue 計算屬性和偵聽器

這篇文章我們來看一下Vue的計算屬性和偵聽屬性。計算屬性是自動監聽依賴值的變化,從而動態返回內容,監聽是一個過程,在監聽的值變化時,可以觸發一個回調,并做一些事情。偵聽屬性watch中可以執行代碼邏輯,如函數節流,Ajax異步獲取數據,甚至操作 DOM。

計算屬性

模板內的表達式非常便利,但是設計它們的初衷是用于簡單運算的。在模板中放入太多的邏輯會讓模板過重且難以維護。例如:

<div id="example">{{ message.split('').reverse().join('') }} </div>

在這個地方,模板不再是簡單的聲明式邏輯。你必須看一段時間才能意識到,這里是想要顯示變量 message 的翻轉字符串。當你想要在模板中多處使用翻轉字符串,就會更加難以處理。

所以,對于這種復雜邏輯,Vue給我們提供了更好的解決方案,計算屬性

基礎例子

<!DOCTYPE html> <html><head><meta charset="utf-8"><title></title><script src="vue.js"></script></head><body><div id="app"><p>Original message: "{{ message }}"</p><p>Computed reversed message: "{{ reversedMessage }}"</p></div><script type="text/javascript">var app = new Vue({el: '#app',data: {message: 'Hello'},computed: {reversedMessage: function () {return this.message.split('').reverse().join('')}}})</script></body> </html>

插值表達式{{ reversedMessage }}首先會去data中找 reversedMessage 這個屬性,如果找不到就再去計算屬性中去找,找到之后再將它顯示在頁面上。

這里我們聲明了一個計算屬性 reversedMessage。我們提供的函數將用作 property app.reversedMessage 的 getter 函數:

console.log(app.reversedMessage) // => 'olleH' app.message = 'Goodbye' console.log(app.reversedMessage) // => 'eybdooG'

你可以打開瀏覽器的控制臺,自行修改例子中的 app。app.reversedMessage 的值始終取決于 app.message 的值。

你可以像綁定普通 property 一樣在模板中綁定計算屬性。Vue 知道 app.reversedMessage 依賴于 app.message,因此當 app.message 發生改變時,所有依賴 app.reversedMessage 的綁定也會更新。而且最妙的是我們已經以聲明的方式創建了這種依賴關系:計算屬性的 getter 函數是沒有副作用 (side effect) 的,這使它更易于測試和理解。

計算屬性緩存 vs 方法

你可能已經注意到計算屬性和我們之前講過的method有些類似,可以通過在表達式中調用方法來達到同樣的效果:

<p>Reversed message: "{{ reversedMessage() }}"</p> // 在組件中 methods: {reversedMessage: function () {return this.message.split('').reverse().join('')} }

我們可以將同一函數定義為一個方法而不是一個計算屬性。兩種方式的最終結果確實是完全相同的。然而,不同的是計算屬性是基于它們的響應式依賴進行緩存的。只在相關響應式依賴發生改變時它們才會重新求值。這就意味著只要 message 還沒有發生改變,多次訪問 reversedMessage 計算屬性會立即返回之前的計算結果,而不必再次執行函數。

這也同樣意味著下面的計算屬性將不再更新,因為 Date.now() 不是響應式依賴:

computed: {now: function () {return Date.now()} }

相比之下,每當觸發重新渲染時,調用方法將總會再次執行函數。

我們為什么需要緩存?假設我們有一個性能開銷比較大的計算屬性 A,它需要遍歷一個巨大的數組并做大量的計算。然后我們可能有其他的計算屬性依賴于 A。如果沒有緩存,我們將不可避免的多次執行 A 的 getter!如果你不希望有緩存,請用方法來替代。

計算屬性的 setter

在 Vue 中,computed 的屬性可以被視為跟 data 一樣,可以讀取和設值,因此在 computed 中可以分成 getter(讀取) 和 setter(設值),一般情況下是沒有 setter 的,computed 預設只有 getter ,也就是只能讀取,不能改變設值。

計算屬性默認只有 getter,不過在需要時你也可以提供一個 setter:

<!DOCTYPE html> <html><head><meta charset="utf-8"><title></title><script src="vue.js"></script></head><body><div id="app"><p>Original message: "{{ message }}"</p><p>Computed reversed message: "{{ reversedMessage }}"</p></div><script type="text/javascript">var app = new Vue({el: '#app',data: {message: 'Hello'},computed: {reversedMessage: {get() {return this.message.split('').reverse().join('')},set(value) {this.message = value}}}})</script></body> </html>

現在再運行 app.reversedMessage = "Alex" 時,setter 會被調用,app.reversedMessage 會相應地被更新。

偵聽屬性

雖然計算屬性在大多數情況下更合適,但有時也需要一個自定義的偵聽屬性。這就是為什么 Vue 通過 watch 選項提供了一個更通用的方法,來響應數據的變化。當需要在數據變化時執行異步或開銷較大的操作時,watch方式是最有用的。

例如,我們可以寫一個類似于《答案之書》的小東西。

答案之書,是一本重新定義了讀者-作者關系的書。 它的每一頁都寫有一句有關選擇或行動的答案,當你為生活中紛擾繁雜的小事猶豫不決的時候,隨意翻開其中一頁,讓這本書幫你做決定。

<!DOCTYPE html> <html><head><meta charset="utf-8"><title></title><script src="vue.js"></script></head><body><div id="app"><p>Ask a yes/no question:<input v-model="question"></p><p>{{ answer }}</p></div><script src="https://cdn.jsdelivr.net/npm/axios@0.12.0/dist/axios.min.js"></script><script>var app = new Vue({el: '#app',data: {question: '',answer: 'I cannot give you an answer until you ask a question!'},watch: {question(newQuestion, oldQuestion) {this.answer = 'Waiting for you to stop typing...'this.getAnswer()}},methods: {getAnswer() {if (this.question.indexOf('?') === -1) {this.answer = 'Questions usually contain a question mark.'return}this.answer = 'Thinking...'var self = thisaxios.get('https://yesno.wtf/api').then(response => {self.answer = response.data.answer}).catch(function(error) {self.answer = 'Error! Could not reach the API. ' + error})}}})</script></body> </html>3

在這個示例中,使用 watch 選項允許我們執行異步操作 (訪問一個 API),并在我們得到最終結果前,設置中間狀態。這些都是計算屬性無法做到的。

計算屬性 vs 偵聽屬性

偵聽屬性是Vue 提供的一種更通用的方式去觀察和響應 Vue 實例上的數據變動。當你有一些數據需要隨著其它數據變動而變動時,你很容易濫用 watch——特別是如果你之前使用過 AngularJS。然而,通常更好的做法是使用計算屬性而不是命令式的 watch 回調。

我們來看一個很簡單的例子,快手前端實習生的面試題:兩個輸入框和一個顯示框,計算兩個輸入框的和。

<!DOCTYPE html> <html><head><meta charset="utf-8"><title></title><script src="vue.js"></script></head><body><div id="app"><input type="number" v-model="a"><span>+</span><input type="number" v-model="b"><span>=</span><span>{{ sum }}</span></div><script type="text/javascript">const app = new Vue({el:'#app',data:{a: 0,b: 0,sum: 0,},watch:{a(value) {this.sum = parseInt(value) + parseInt(this.b)},b(value) {this.sum = parseInt(this.a) + parseInt(value)}}})</script></body> </html>

上面代碼是命令式且重復的。我們用計算屬性的版本進行比較:

const app = new Vue({el:'#app',data:{a: 0,b: 0,},computed:{sum(){return parseInt(this.a) + parseInt(this.b)}} })

好得多了,不是嗎?


最后我們再回顧一下這節課的內容:計算屬性是自動監聽依賴值的變化,從而動態返回內容,監聽是一個過程,在監聽的值變化時,可以觸發一個回調,并做一些事情。偵聽屬性watch中可以執行代碼邏輯,如函數節流,Ajax異步獲取數據,甚至操作 DOM。

總結

以上是生活随笔為你收集整理的5.Vue 计算属性和侦听器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 波多野吉衣在线视频 | 久久久精品久久 | 亚洲一二三区视频 | china国模大尺度pics | 日日不卡av | 女生隐私免费看 | a免费观看 | 香蕉传媒 | 久久93 | 强制高潮抽搐哭叫求饶h | 天天cao| 欧美日韩网| 粉嫩av.com| 伊人超碰在线 | av成人在线电影 | caopeng在线| 天天看夜夜 | 亚洲aaa级 | 欧美日韩一区二区三区四区 | 秋霞午夜鲁丝一区二区老狼 | 国产一级视频在线观看 | 国产一区资源 | 欧美亚洲另类小说 | 国产v片| 成人av高清 | 污污污www精品国产网站 | 手机在线小视频 | 成人免费a级片 | 亚洲在线免费看 | 国产特黄 | 欧美福利片在线观看 | 婷婷爱五月 | 天天爽天天做 | 亚洲精品一区久久久久久 | 国产色片| 国产黑丝在线播放 | 国产精品98 | av中文字幕在线免费观看 | 亚洲永久免费精品 | 欧美黄色大片网站 | 欧洲最强rapper网站直播 | 狠狠躁夜夜躁人人爽天天高潮 | 看了下面会湿的视频 | 日本成人片在线 | 天天色天天操天天射 | 国产区精品区 | 亚洲激情第一页 | 天天操天天操天天操天天 | 久久久久久久久久久电影 | 国产又粗又猛视频 | 亚洲制服无码 | 亚洲精品国产精品国自产在线 | 中文字幕av一区二区三区 | 乱子伦一区二区 | 萌白酱在线观看 | 男人插女人免费视频 | 黑人借宿巨大中文字幕 | 久久国产亚洲精品无码 | 黄免费在线观看 | 久久久久成人片免费观看蜜芽 | 国产精品自拍小视频 | 人妻丰满熟妇av无码久久洗澡 | 久草在现 | 综合视频在线 | 亚洲制服丝袜诱惑 | 快射视频在线观看 | 狠狠热免费视频 | 免费看黄色片的网站 | 影音先锋在线观看视频 | 欧美一区二区在线观看 | 可以免费观看av的网站 | 奇米7777| 日本日韩欧美 | 好屌妞视频这里有精品 | 波多野结衣中文一区 | 国产91在线看 | 无码人妻aⅴ一区二区三区 国产高清一区二区三区四区 | 男女啪动最猛动态图 | 黄色www| 麻豆成人久久精品一区二区三区 | 五月婷婷综合网 | 日韩一区二区三区在线观看视频 | 欧美日本一本 | 久久视频一区二区三区 | 日韩成人在线观看 | 久久久精品国产免费爽爽爽 | 99久久免费精品 | 美女国产视频 | 国产做受视频 | 成人片在线免费看 | 噜噜色网| 国产黄色大全 | 精品国产乱码久久久人妻 | 亚洲精品影院在线 | 久久久久久av无码免费看大片 | 天堂在线视频观看 | 熟妇高潮一区二区三区 | 香蕉久久夜色精品国产使用方法 | 久久国语精品 |