在Vue中什么情況用computed梢薪,watch,methods個(gè)人理解

用一個(gè)例子來說明一下吧:

<div id="demo">
  <p>message: "{{ message }}"</p>
  <p>reversed message: "{{ reversedMessage }}"</p>
  <button @click="add">add</button>
  <p>點(diǎn)擊次數(shù):{{num}}</p>
</div>

var vm = new Vue({
  el: '#demo',
  data: {
    message : 'abcde',
    num: 0
  },
  watch: {
    // 監(jiān)聽數(shù)據(jù)的變化做出對(duì)應(yīng)的改變尝哆,并不會(huì)生成新的屬性
    num (newVal) {
        if (newVal > 5) this.alert()
    }
  },
  methods: {
    alert () {
      alert('點(diǎn)擊次數(shù)達(dá)到'+this.num+'次啦')
    },
    add () {
      this.num += 1
    }
  },
  computed: { 
    // 根據(jù)原有值生成一個(gè)新的屬性值
    reversedMessage () {
      return this.message.split('').reverse().join('')
    }
  }
})

methods: 存放的方法是一些內(nèi)部方法沮尿、事件的回調(diào)、命令是調(diào)用的方法较解。
watch: 用于監(jiān)聽數(shù)據(jù)的實(shí)時(shí)的變化畜疾。在數(shù)據(jù)變化的回調(diào)中執(zhí)行異步操作或者開銷很大的時(shí)候使用。
computed: 也是實(shí)時(shí)監(jiān)聽數(shù)據(jù)變化印衔,做出相應(yīng)的變化啡捶,跟watch不同的是他可以被看成一個(gè)data里面的屬性值來使用。所以當(dāng)我們需要監(jiān)聽一個(gè)值并且需要生成一個(gè)新的屬性時(shí)就可以使用computed奸焙。

cumputed vs methods

有些時(shí)候computedmethods可以完成同樣的事情瞎暑,但是computed是基于它們的依賴進(jìn)行緩存的,而methods需要每次去計(jì)算与帆。

 <p>reversed message: "{{ reversedMessage() }}"</p>

{
  methods: {
    reversedMessage () {
       return this.message.split('').reverse().join('')
    }
  }
}

computed只有在他依賴的數(shù)據(jù)發(fā)生變化時(shí)才會(huì)求值了赌。依賴不發(fā)生改變,每次訪問computed應(yīng)該是之前的計(jì)算結(jié)果玄糟。
也就是說需要緩存的話可以使用computed來實(shí)現(xiàn)勿她,不需要的話可以用其他方式代替。

cumputed vs watch

官方的例子

<div id="demo">{{ fullName }}</div>
// 用watch實(shí)現(xiàn)
var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar',
    fullName: 'Foo Bar'
  },
  watch: {
    firstName: function (val) {
      this.fullName = val + ' ' + this.lastName
    },
    lastName: function (val) {
      this.fullName = this.firstName + ' ' + val
    }
  }
})
// 用computed實(shí)現(xiàn)
var vm = new Vue({
  el: '#demo',
  data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  computed: {
    fullName: function () {
      return this.firstName + ' ' + this.lastName
    }
  }
})

很明顯computed實(shí)現(xiàn)起來更簡(jiǎn)潔更方便也更容易理解阵翎。
當(dāng)你有一些數(shù)據(jù)需要隨著其它數(shù)據(jù)變動(dòng)而變動(dòng)時(shí)逢并,你很容易濫用 watch之剧。然而,通常更好的想法是使用計(jì)算屬性而不是命令式的 watch 回調(diào)砍聊。

computed 的 setter 和 getter

默認(rèn)情況下 只有 getter背稼,不過在需要時(shí)你也可以提供一個(gè) setter

computed: {
  fullName: {
    // getter
    get: function () {
      return this.firstName + ' ' + this.lastName
    },
    // setter
    set: function (newValue) {
      var names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    }
  }
}

現(xiàn)在再運(yùn)行 vm.fullName = 'John Doe' 時(shí),setter 會(huì)被調(diào)用玻蝌,vm.firstNamevm.lastName 也相應(yīng)地會(huì)被更新蟹肘。

雖然計(jì)算屬性在大多數(shù)情況下更合適,但有時(shí)也需要一個(gè)自定義的 watcher俯树。這是為什么 Vue 通過 watch 選項(xiàng)提供一個(gè)更通用的方法疆前,來響應(yīng)數(shù)據(jù)的變化。當(dāng)你想要在數(shù)據(jù)變化響應(yīng)時(shí)聘萨,執(zhí)行異步操作或開銷較大的操作竹椒,這是很有用的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末米辐,一起剝皮案震驚了整個(gè)濱河市胸完,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌翘贮,老刑警劉巖赊窥,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異狸页,居然都是意外死亡锨能,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門芍耘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來址遇,“玉大人,你說我怎么就攤上這事斋竞【笤迹” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵坝初,是天一觀的道長(zhǎng)浸剩。 經(jīng)常有香客問我,道長(zhǎng)鳄袍,這世上最難降的妖魔是什么绢要? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮拗小,結(jié)果婚禮上重罪,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好蛆封,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著勾栗,像睡著了一般惨篱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上围俘,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天砸讳,我揣著相機(jī)與錄音,去河邊找鬼界牡。 笑死簿寂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宿亡。 我是一名探鬼主播常遂,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼挽荠!你這毒婦竟也來了克胳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤圈匆,失蹤者是張志新(化名)和其女友劉穎漠另,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跃赚,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笆搓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纬傲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片满败。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叹括,靈堂內(nèi)的尸體忽然破棺而出葫录,到底是詐尸還是另有隱情,我是刑警寧澤领猾,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布米同,位于F島的核電站,受9級(jí)特大地震影響摔竿,放射性物質(zhì)發(fā)生泄漏面粮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一继低、第九天 我趴在偏房一處隱蔽的房頂上張望熬苍。 院中可真熱鬧,春花似錦、人聲如沸柴底。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柄驻。三九已至狐树,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸿脓,已是汗流浹背抑钟。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留野哭,地道東北人在塔。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像拨黔,于是被迫代替她去往敵國和親蛔溃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容篱蝇,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容城榛。關(guān)于...
    云之外閱讀 5,046評(píng)論 0 29
  • vue.js是什么 是一套構(gòu)建用戶界面的漸進(jìn)式框架 vue應(yīng)用組成 一個(gè) Vue 應(yīng)用由一個(gè)通過new Vue創(chuàng)建...
    多多醬_DuoDuo_閱讀 1,024評(píng)論 0 2
  • 1.安裝 可以簡(jiǎn)單地在頁面引入Vue.js作為獨(dú)立版本,Vue即被注冊(cè)為全局變量态兴,可以在頁面使用了狠持。 如果希望搭建...
    Awey閱讀 11,002評(píng)論 4 129
  • 這方面的文章很多,但是我感覺很多寫的比較抽象瞻润,本文會(huì)通過舉例更詳細(xì)的解釋喘垂。(此文面向的Vue新手們,如果你是個(gè)大牛...
    Ivy_2016閱讀 15,376評(píng)論 8 64
  • Vue 框架的入口就是 Vue 實(shí)例绍撞,其實(shí)就是框架中的 view model 正勒,它包含頁面中的業(yè)務(wù) 處理邏輯、數(shù)據(jù)...
    云中一樵夫閱讀 1,080評(píng)論 0 1