關(guān)于vue中計算屬性computed的詳細講解
1.定義
computed是vue的計算屬性,是根據(jù)依賴關(guān)系進行緩存的計算,只有在它的相關(guān)依賴發(fā)生改變時才會進行更新
2.用法
一般情況下,computed默認使用的是getter屬性
3.computed的響應式依賴(緩存)
1. computed的每一個計算屬性都會被緩存起來,只要計算屬性所依賴的屬性發(fā)生變化,計算屬性就會重新執(zhí)行,視圖也會更新。下面代碼中,計算屬性fullName,它依賴了firstName和lastName這兩個屬性,只要它們其中一個屬性變化,fullName就會重新執(zhí)行。
2.computed計算屬性會被緩存,在下面代碼中使用了兩次fullName,但在控制臺只輸出了一次 “這是fullName”。
<template> <div> <div> 姓:<input type="text" v-model="firstName" /> </div> <div> 名:<input type="text" v-model="lastName" /> </div> <!-- 調(diào)用兩次fullName --> <div>姓名:{{ fullName }}</div> <div>姓名:{{ fullName }}</div> </div> </template> <script> export default { data() { return { firstName: "張", lastName: "三", }; }, computed: { fullName() { console.log("這是fullName"); return this.firstName + this.lastName; } } }; </script>
4.應用場景
當一個數(shù)據(jù)受多個數(shù)據(jù)影響時,可以使用computed
1.本組件計算
2.計算props的值
3.計算vuex的state或者getters值的變化
附:計算屬性的 getter 與 setter
默認情況下,計算屬性函數(shù)是一個 getter 函數(shù),如果計算屬性只有 get 需求,則可以簡寫
<!DOCTYPE html> <html lang="en"> <head> ? ? <meta charset="UTF-8"> ? ? <meta name="viewport" content="width=device-width, initial-scale=1.0"> ? ? <title>Document</title> ? ? <script src="./node_modules/vue/dist/vue.js"></script> </head> <body> ? ? <div id="app"> ? ? ? ? <div> ? ? ? ? ? ? <!-- <input type="checkbox" v-model='isAll'> --> ? ? ? ? ? ? <input type="text" v-model='n'> ? ? ? ? ? ? + ? ? ? ? ? ? <input type="text" v-model='m'> ? ? ? ? ? ? = ? ? ? ? ? ? <input type="text" v-model='x'> ? ? ? ? </div> ? ? ? ? {{o}} ? ? </div> ? ? <script> ? ? ? ? let vm = new Vue({ ? ? ? ? ? ? el: '#app', ? ? ? ? ? ? data: { ? ? ? ? ? ? ? ? is: true, ? ? ? ? ? ? ? ? obj: { ? ? ? ? ? ? ? ? ? ? // a: 1 ? ? ? ? ? ? ? ? ? ? a: 1 ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? n: '', ? ? ? ? ? ? ? ? m: '' ? ? ? ? ? ? }, ? ? ? ? ? ? computed: { ? ? ? ? ? ? ? ? //計算屬性在這里寫的屬性不要在data重復寫 跟data中的數(shù)據(jù)一樣可以通過vm.獲取或者修改 ? ? ? ? ? ? ? ? isAll: { ? ? ? ? ? ? ? ? ? ? get() { ? ? ? ? ? ? ? ? ? ? ? ? //只要獲取這個屬性就會觸發(fā)get這個函數(shù) ? ? ? ? ? ? ? ? ? ? ? ? console.log(1); ? ? ? ? ? ? ? ? ? ? ? ? return this.is ? ? ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? ? ? set(val) { ? ? ? ? ? ? ? ? ? ? ? ? // val 設置的值 ? ? ? ? ? ? ? ? ? ? ? ? this.isAll = this.is ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? x: { ? ? ? ? ? ? ? ? ? ? // 只要是依賴的值(必須有setter和getter響應的數(shù)據(jù))發(fā)生改變了就會重新計算自己的值 ? ? ? ? ? ? ? ? ? ? get() { ? ? ? ? ? ? ? ? ? ? ? ? return Number(this.n) + Number(this.m) ? ? ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? ? ? // set(){ ? ? ? ? ? ? ? ? ? ? // ? ? Number(this.n) + Number(this.m) ? ? ? ? ? ? ? ? ? ? // } ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? o: { ? ? ? ? ? ? ? ? ? ? get() { ? ? ? ? ? ? ? ? ? ? ? ? //如果沒有在data的obj中初始化 就沒有g(shù)etter和setter響應 當改變this.obj.a的時候不會影響 數(shù)據(jù)o ? ? ? ? ? ? ? ? ? ? ? ? return this.obj.a + 1 ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? ss: { ? ? ? ? ? ? ? ? ? ? get() { }, ? ? ? ? ? ? ? ? ? ? //計算屬性必須要有g(shù)et可以沒有set ? ? ? ? ? ? ? ? ? ? //v-model綁定的計算屬性有g(shù)et和set ? ? ? ? ? ? ? ? ? ? //其他的一般只有g(shù)et ? ? ? ? ? ? ? ? ? ? set() { } ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? xx() { ? ? ? ? ? ? ? ? ? ? //如果這個計算屬性只有g(shù)et可以寫成一個函數(shù)的形式 ? ? ? ? ? ? ? ? }, ? ? ? ? ? ? ? ? bb() { ? ? ? ? ? ? ? ? ? ? //第一次獲取的時候依賴值沒有發(fā)生改變但是也會默認執(zhí)行一次 ? ? ? ? ? ? ? ? ? ? // 必須要有return ?不支持異步 ? ? ? ? ? ? ? ? ? ? let a = 'kk'; ? ? ? ? ? ? ? ? ? ? setTimeout(() => { ? ? ? ? ? ? ? ? ? ? ? ? a = this.aa + a ? ? ? ? ? ? ? ? ? ? }, 1000) ? ? ? ? ? ? ? ? ? ? console.log(a); ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? return this.aa ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? }) ? ? </script> </body> </html>
參考:https://cn.vuejs.org/v2/guide/computed.html
https://segmentfault.com/a/110000012948175
總結(jié)
到此這篇關(guān)于vue中計算屬性computed的詳細講解的文章就介紹到這了,更多相關(guān)vue計算屬性computed內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vuex數(shù)據(jù)持久化實現(xiàn)的思路與代碼
Vuex數(shù)據(jù)持久化可以很好的解決全局狀態(tài)管理,當刷新后數(shù)據(jù)會消失,這是我們不愿意看到的。這篇文章主要給大家介紹了關(guān)于Vuex數(shù)據(jù)持久化實現(xiàn)的思路與代碼,需要的朋友可以參考下2021-05-05springboot+vue+對接支付寶接口+二維碼掃描支付功能(沙箱環(huán)境)
這篇文章主要介紹了springboot+vue+對接支付寶接口+二維碼掃描支付(沙箱環(huán)境),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10vue純前端實現(xiàn)將頁面導出為pdf和word文件
這篇文章主要為大家詳細介紹了vue如何通過純前端實現(xiàn)將頁面導出為pdf和word文件,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下2024-01-01vue中國城市選擇器的使用教程(element-china-area-data)
這篇文章主要給大家介紹了關(guān)于vue中國城市選擇器使用(element-china-area-data)的相關(guān)資料,使用element-china-area-data插件可以非常方便地實現(xiàn)省市縣三級聯(lián)動選擇器,需要的朋友可以參考下2023-11-11Vue2.0實現(xiàn)組件數(shù)據(jù)的雙向綁定問題
這篇文章主要介紹了Vue2.0實現(xiàn)組件數(shù)據(jù)的雙向綁定問題,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-03-03vue element-ui實現(xiàn)動態(tài)面包屑導航
這篇文章主要為大家詳細介紹了vue element-ui實現(xiàn)動態(tài)面包屑導航,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12