Vue 中methods佳谦,computed,watch的區(qū)別

methods

methods中定義的都是具體的方法滋戳,根據(jù)一些觸發(fā)條件钻蔑,調用一次啥刻,重新執(zhí)行一次。

比如說點擊事件

<template>
    <div>
        <!-- 調用一次咪笑,執(zhí)行一次 -->
        <div @click="onClick">
            
    </div>
    </div>
</template>

<script>
export default{
    methods:{
        // 定義一些事件處理函數(shù)
        onClick(){
            window.console.log("hello word")
        }
    }
}
</script>

computed

  • computed是vue中獨有的一個計算屬性可帽,它是基于它們的依賴進行緩存的,只有在它的相關依賴發(fā)生改變時才會重新求值。
  • 就算在data中沒有直接聲明出要計算的變量窗怒,也可以直接在computed中寫入映跟。
  • 計算屬性默認只有getter,可以在需要的時候自己設定setter
  • setter默認有一個參數(shù)(用不到也可以不寫)

比如說購物車總價總價總量計算扬虚,用計算屬性實現(xiàn)會變得非常容易努隙。

<script>
    export default{
        computed:{
            // 總價計算
            totalPrice(state) {
            // 聲明一個變量
            let totalPrice = 0
            // 循環(huán)購物車數(shù)組
                state.shoppingCartItem.forEach(ele => {
                    // 如果選中則累加商品價格*商品數(shù)量
                    if(ele.checked == true){
                        totalPrice += ele.count * ele.price
                    }
                })
                // 導出
            return totalPrice
        }
    }
</script>

vue中input的值雙向綁定的數(shù)據(jù)必須在data中定義,但是由于使用了vuex孔轴,數(shù)據(jù)全部定義在vuex中剃法,所以采用計算屬性的get和set定義雙向綁定的值。

<script>
    export default{
          computed: {
            test:{
                // get方法獲取vuex的數(shù)據(jù)并return
                get(){
                    return this.$store.state.shoppingCartCheckAll
                },
                //set方法接收一個參數(shù)路鹰,這個參數(shù)就是綁定的布爾值
                //set會改變傳過來的值
                set(v){
                //window.console.log(v)
                //提交一個方法 在vuex中定義并處理
                this.$store.commit("oncheckAll",v);
                }
            }
        },
    }
</script>

總結:數(shù)據(jù)量大,需要緩存的時候用computed收厨;每次確實需要重新加載,不需要緩存時用methods。

watch

watch的作用可以監(jiān)控一個值的變換疗琉,并調用因為變化需要執(zhí)行的方法簿寂。可以通過watch動態(tài)改變關聯(lián)的狀態(tài)拧额。

它用于觀察Vue實例上的數(shù)據(jù)變動碑诉。對應一個對象,鍵是觀察表達式侥锦,值是對應回調进栽。值也可以是方法名,或者是對象恭垦,包含選項快毛。

商品的多重篩選可以用到這個屬性。

<script>
    export default{
        watch: {
    filter: {
      handler: function(val, oldval) {
        window.console.log(oldval);
        // 聲明一個數(shù)組
        let arr = [];
        // 每次點擊價格篩選就會給對象的價格條件屬性重新賦值
        // 如果不等于初始設置的值
        if (val.price !== -1) {
          // 如果重新賦值為0判斷
          if (val.price === 0) {
            this.data.forEach(ele => {
              if (ele.price < 3999) {
                arr.push(ele);
              }
            });
          } else if (val.price === 1) {
            this.data.forEach(ele => {
              if (ele.price >= 4000 && ele.price <= 4499) {
                arr.push(ele);
              }
            });
          } else if (val.price === 2) {
            this.data.forEach(ele => {
              if (ele.price >= 4500 && ele.price <= 4999) {
                arr.push(ele);
              }
            });
          }
          // 判斷完所有下標后把定義的數(shù)組賦值給頁面顯示的數(shù)組
          // return出來
          this.currentData = arr;
        } else {
          // 如果沒有重新賦值則賦值為原數(shù)組
          this.currentData = this.data;
        }
        let newArr = [];
        // 如果類型篩選條件不為空,也就是重新賦值了
        if (val.type.length !== 0) {
          // 循環(huán)頁面顯示的數(shù)組
          this.currentData.forEach(ele => {
            // 如果提交的類型存在就添加到新數(shù)組
            if (val.type === ele.type) {
              newArr.push(ele);
            }
          });
          // 賦值
          this.currentData = newArr;
        } else {
          newArr = this.currentData;
        }
      },
      deep:true
    }
  },
    }
</script>

computed 和 watch 都可以觀察頁面的數(shù)據(jù)變化番挺。當處理頁面的數(shù)據(jù)變化時唠帝,我們有時候很容易濫用watch。 而通常更好的辦法是使用computed屬性玄柏,而不是命令是的watch回調襟衰。

盡量用computed計算屬性來監(jiān)視數(shù)據(jù)的變化,因為它本身就這個特性粪摘,用watch沒有computed“自動”瀑晒,手動設置使代碼變復雜绍坝。

在大多數(shù)情況下computed屬性都能夠代替watch屬性使用,但是在有些情況下我們需要自定義一個watcher瑰妄,在數(shù)據(jù)變化時來執(zhí)行異步操作陷嘴,這時watch是非常有用的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末间坐,一起剝皮案震驚了整個濱河市灾挨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竹宋,老刑警劉巖劳澄,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蜈七,居然都是意外死亡秒拔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門飒硅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砂缩,“玉大人,你說我怎么就攤上這事三娩♀职牛” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵雀监,是天一觀的道長双吆。 經(jīng)常有香客問我,道長会前,這世上最難降的妖魔是什么好乐? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮瓦宜,結果婚禮上蔚万,老公的妹妹穿的比我還像新娘。我一直安慰自己歉提,他們只是感情好笛坦,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苔巨,像睡著了一般版扩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侄泽,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天礁芦,我揣著相機與錄音,去河邊找鬼。 笑死柿扣,一個胖子當著我的面吹牛肖方,可吹牛的內容都是我干的。 我是一名探鬼主播未状,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼俯画,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了司草?” 一聲冷哼從身側響起艰垂,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎埋虹,沒想到半個月后猜憎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡搔课,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年胰柑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爬泥。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡柬讨,死狀恐怖,靈堂內的尸體忽然破棺而出袍啡,到底是詐尸還是另有隱情姐浮,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布葬馋,位于F島的核電站,受9級特大地震影響肾扰,放射性物質發(fā)生泄漏畴嘶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一集晚、第九天 我趴在偏房一處隱蔽的房頂上張望窗悯。 院中可真熱鬧,春花似錦偷拔、人聲如沸蒋院。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欺旧。三九已至,卻和暖如春蛤签,著一層夾襖步出監(jiān)牢的瞬間辞友,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留称龙,地道東北人留拾。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像鲫尊,于是被迫代替她去往敵國和親痴柔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355