Vue 計算屬性

什么是計算屬性

我們己經(jīng)可以搭建出一個簡單的 Vue 應(yīng)用刃鳄,在模板中雙向綁定一些數(shù)據(jù)或表達(dá)式了。但是表達(dá)式如果過長慰照,或邏輯更為復(fù)雜時富腊,就會變得雕腫甚至難以閱讀和維護(hù)
如:

<div>
{{ text.split ( ’,’ ) ?reverse () . join (’,’)}}
</div>

這里的表達(dá)式包含 3 個操作蛆挫,并不是很清晰赃承,所以在遇到復(fù)雜的邏輯時應(yīng)該使用 計算屬性

所有的計算屬性都以函數(shù)的形式寫在 Vue 實(shí)例內(nèi)的 computed 選項(xiàng)內(nèi)妙黍,最終返回計算后的結(jié)果悴侵。

計算屬性用法

  1. 在一個計算屬性里可以完成各種復(fù)雜的邏輯,包括運(yùn)算拭嫁、函數(shù)調(diào)用等可免,只要最終返回一個結(jié)果就可以
  2. 計算屬性還可以依賴多個 Vue 實(shí)例的數(shù)據(jù)抓于,只要其中任一數(shù)據(jù)變化,計算屬性就會重新執(zhí)行浇借,視圖也會更新

例如:

 var App2 = new Vue({
      el: '#aaa',
      data: {
        msg: '我是App2的數(shù)據(jù)'
      }
    })


    var App1 = new Vue({
      el: '#shopp',
      data: {
        package1: [
          {
            name: 'iphone',
            price: 6009,
            count: 2
          },{
            name: '蘋果',
            price: 999,
            count: 1
          }
        ],
        package2: [
          {
            name: '橘子',
            price: 4332,
            count: 2
          },{
            name: '蘿卜',
            price: 221,
            count: 3
          }
        ]
      },
      computed: {
        prices: function(){
          var total = 0
          for( var i = 0; i < this.package1.length; i++){
            total += this.package1[i].price*this.package1[i].count
          }
          for( var j = 0; j < this.package2.length; j++){
            total += this.package2[j].price*this.package2[j].count
          }

          return total + '----' + App2.msg
        }
      }
    })

getter和setter

每一個計算屬性都包含-個 getter 和一個 setter捉撮,我們上面的兩個示例都是計算屬性的默認(rèn)用法 , 只是利用了 getter來讀取妇垢。在你需要時巾遭,也可以提供一個 setter 函數(shù) , 當(dāng)手動修改計算屬性的值就像修改一個普通數(shù)據(jù)那樣時闯估,就會觸發(fā) setter函數(shù)灼舍,執(zhí)行一些自定義的操作 。

默認(rèn)用法 getter 舉例:

var App = new Vue({
      el: '#names',
      data: {
        firstName: 'Liu',
        lastName: 'bei'
      },
      computed: {
        fullName: {
          get: function(){
            return this.firstName + this.lastName
          }
      }
    })

//等同于
var App = new Vue({
      el: '#names',
      data: {
        firstName: 'Liu',
        lastName: 'bei'
      },
      computed: {
        fullName: function(){
          return this.firstName + this.lastName
        }
      }
    })

setter 用法 舉例:

var App = new Vue({
      el: '#naa',
      data: {
        firstName: 'Liu',
        lastName: 'bei'
      },
      computed: {
        fullName: {
          get: function(){
            return this.firstName + this.lastName
          },

          set: function(newValue){
            var names = newValue.split(',')
            this.firstName = names[0]
            this.lastName = names[1]
          }
        }
      }
    })

計算屬性緩存

調(diào)用 methods 里的方法也可以與計算屬性起到同樣的作用
方法methods : 如果是調(diào)用方法涨薪,只要頁面重新渲染骑素。方法就會重新執(zhí)行
計算屬性computed:不管渲染不渲染,只要計算屬性依賴的數(shù)據(jù)未發(fā)生變化刚夺,就永遠(yuǎn)不變

結(jié)論: 沒有使用計算屬性献丑,在 methods 里定義了一個方法實(shí)現(xiàn)了相同的效果,甚至該方法還可以接受參數(shù)侠姑,使用起來更靈活创橄。既然使用 methods就可以實(shí)現(xiàn),那么為什么還需要計算屬性呢莽红?

原因就是:
計算屬性是基于它的依賴緩存的筐摘。 一個計算屬性所依賴的數(shù)據(jù)發(fā)生變化時,它才會重新取值船老,所以text 只要不改變咖熟,計算屬性也就不更新

何時使用: -----------使用computed還是 methods 取決于你是否需要緩存,當(dāng)遍歷大數(shù)組和做大量計算時柳畔,應(yīng)當(dāng)使用計算屬性馍管,除非你不希望得到緩存。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末薪韩,一起剝皮案震驚了整個濱河市确沸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俘陷,老刑警劉巖罗捎,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拉盾,居然都是意外死亡桨菜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倒得,“玉大人泻红,你說我怎么就攤上這事∠疾簦” “怎么了谊路?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長菩彬。 經(jīng)常有香客問我缠劝,道長,這世上最難降的妖魔是什么骗灶? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任剩彬,我火速辦了婚禮,結(jié)果婚禮上矿卑,老公的妹妹穿的比我還像新娘喉恋。我一直安慰自己,他們只是感情好母廷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布轻黑。 她就那樣靜靜地躺著,像睡著了一般琴昆。 火紅的嫁衣襯著肌膚如雪氓鄙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天业舍,我揣著相機(jī)與錄音抖拦,去河邊找鬼。 笑死舷暮,一個胖子當(dāng)著我的面吹牛态罪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播下面,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼复颈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沥割?” 一聲冷哼從身側(cè)響起耗啦,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎机杜,沒想到半個月后帜讲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椒拗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年似将,在試婚紗的時候發(fā)現(xiàn)自己被綠了获黔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡玩郊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出枉阵,到底是詐尸還是另有隱情译红,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布兴溜,位于F島的核電站侦厚,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拙徽。R本人自食惡果不足惜刨沦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膘怕。 院中可真熱鬧想诅,春花似錦、人聲如沸岛心。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽忘古。三九已至徘禁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間髓堪,已是汗流浹背送朱。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留干旁,地道東北人驶沼。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像争群,于是被迫代替她去往敵國和親商乎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1、什么事計算屬性 在模板中雙向綁定一些數(shù)據(jù)或表達(dá)式专控。但是表達(dá)式如果過長抹凳,或邏輯更為復(fù)雜時,就會變得雕腫甚至難以閱...
    Marshall_Wang閱讀 263評論 0 1
  • 計算屬性和偵聽器 計算屬性 模板內(nèi)的表達(dá)式非常便利伦腐,但是設(shè)計它們的初衷是用于簡單運(yùn)算的赢底。在模板中放入太多的邏輯會讓...
    Program_黑閱讀 819評論 3 9
  • 模板內(nèi)的表達(dá)式非常便利,但是設(shè)計它們的初衷是用于簡單運(yùn)算的。在模板中放入太多的邏輯會讓模板過重且難以維護(hù)幸冻。 這里說...
    廖馬兒閱讀 570評論 0 0
  • 一粹庞、計算屬性 什么時候會用到計算屬性? 當(dāng)綁定的數(shù)據(jù)邏輯較為復(fù)雜時洽损! 例如: ①基礎(chǔ)例子 Vue 知道vm.rev...
    趁你還年輕233閱讀 782評論 0 3
  • 每個人的青春都有無限可能庞溜,但每個人的青春都有屬于他們自己的風(fēng)采,一個人的青春是一條路碑定,無數(shù)人有無數(shù)的路流码,路的終點(diǎn)不...
    夏至未至_穆漓閱讀 380評論 3 0