1. 程式人生 > >vue中 methods、watch、computed之間的差別

vue中 methods、watch、computed之間的差別

一、計算屬性

當頁面中有某些資料依賴其他資料進行變動的時候,可以使用計算屬性。

<div id="app">
{{fullName}}
</div>
var vm = new Vue({
        el: '#app',
        data: {
            firstName: 'Foo',
            lastName: 'Bar',
        },
        computed: {
            fullName: function () {
                return this.firstName + ' ' + this.lastName
            }
        }
    })
需要注意的是,就算在data中沒有直接宣告出要計算的變數,也可以直接在computed中寫入。
計算屬性預設只有getter,可以在需要的時候自己設定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]
            }
        }
    }
這個時候在控制檯直接執行vm.fullName = ‘bibi wang’,相應的firstName和lastName也會改變。

computed屬性不能與data一樣,不然無法computed,由於已經在data之中定義,所以會報錯The computed property "xxx" is already defined in data

二、watch

很多人覺得watch和computed很相似,watch用於觀察和監聽頁面上的vue例項,當然在大部分情況下我們都會使用computed,但如果要在資料變化的同時進行非同步操作或者是比較大的開銷,那麼watch為最佳選擇。watch為一個物件,鍵是需要觀察的表示式,值是對應回撥函式。值也可以是方法名,或者包含選項的物件。直接引用文件例子

var vm = new Vue({
        el: '#app',
        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
            }
        }
    })
如果在data中沒有相應的屬性的話,是不能watch的,這點和computed不一樣。

三、methods

方法,跟前面的都不一樣,我們通常在這裡面寫入方法,只要呼叫就會重新執行一次,相應的有一些觸發條件,在某些時候methods和computed看不出來具體的差別,但是一旦在運算量比較複雜的頁面中,就會體現出不一樣。

需要注意的是,computed是具有快取的,這就意味著只要計算屬性的依賴沒有進行相應的資料更新,那麼computed會直接從快取中獲取值,多次訪問都會返回之前的計算結果。

總結:

在computed和watch方面,一個是計算,一個是觀察,在語義上是有區別的。

計算是通過變數計算來得出資料。而觀察是觀察一個特定的值,根據被觀察者的變動進行相應的變化,在特定的場景下不能相互混用,所以還是需要注意api運用的合理性和語義性。

相關推薦

vue methodswatchcomputed之間差別

一、計算屬性 當頁面中有某些資料依賴其他資料進行變動的時候,可以使用計算屬性。 <div id="app"> {{fullName}} </div>var vm = new Vue({ el: '#app', dat

Vuemethodswatchcomputed

看到這個標題就知道這篇文章接下來要講的內容,我們在使用vue的時候methods、watch、computed這三個特性一定經常使用,因為它們是非常的有用,但是沒有徹底的理解它們的區別和各自的使用場景,也很難用好它們,希望接下來的介紹為你答疑解惑。 computed 我們先來看計算屬性:computed,

vuemethodscomputedwatch區別

span com 緩存 strong class -s spa 做事 str vue中methods、computed、watch區別methods:事件調用的鉤子 computed:{ // 計算屬性是根據他依賴的值計算的,當依賴值發生變化,其跟著改變

Vuemethodswatchcomputed的區別

看到這個標題就知道這篇文章接下來要講的內容,我們在使用vue的時候methods、watch、computed這三個特性一定經常使用,因為它們是非常的有用,但是沒有徹底的理解它們的區別和各自的使用場景,也很難用好它們,希望接下來的介紹為你答疑解惑。 computed 我們先來看計算屬

前端框架Vuemethods,computed,watch的呼叫時機的理解

最近在學Vue框架的 時候對methods,computed不甚理解,看了幾篇別人寫的部落格感覺描述的也很模糊,故而在稍微明白他們之間主要差異的時候,寫篇部落格記錄分享一下。 methods中定義的函式,其呼叫時機是:當頁面引用了vue data關鍵字的屬性,並且這些屬性發

Vue父傳子子傳父元件之間傳值

在Vue的框架開發的專案過程中,經常會用到元件來管理不同的功能,有一些公共的元件會被提取出來。這時必然會產生一些疑問和需求?比如一個元件呼叫另一個元件作為自己的子元件,那麼我們如何進行給子元件進行傳值呢。常見的就是父子元件,子父元件之間的傳值。父子元件的關係可以總結為 pro

vue.js基礎02--計算屬性(computedwatch&watch)過濾器自定義元件(componentcomponents)

1.vue例項中的計算屬性選項 計算屬性關鍵詞: computed。 在一個計算屬性裡可以完成各種複雜的邏輯,包括運算、函式呼叫等,只要最終返回一個結果就可以。 <body> <div id="example"> <p>Ori

vuemethods一個方法調用另外一個方法

img bsp 方法 調用 .com 9.png es2017 png http vue中methods一個方法調用另外一個方法

vuemethods互相呼叫的方法

a:function(goods) { this.aa= []; this.bb= 0; this.cc= 0; }, b:function(){ if(this.bbb!= 0){ this.aa= []; thi

Vue 父元件和子元件之間獲取對方資料和方法

父元件獲取子元件的資料和方法 one 在父元件中呼叫子元件時,定義一個ref(其實和選擇器類似): <Common ref="commonChild" :pathologyId="form.pathologyId" /> 在父元件中獲取子元件屬性和方

vuemethods一個方法呼叫另外一個方法

vue在同一個元件內; methods中的一個方法呼叫methods中的另外一個方法 可以在呼叫的時候 this.$options.methods.test2(); this.$options.methods.test2();一個方法呼叫另外一個方法; new Vue({

Vuemethods相互呼叫

1.方法login必須在onSubmit之前定義 2.onSubmit方法之中,this.$options.methods必須在onSubmit方法下呼叫,不能放到 回撥方法裡面(//this.$o

vue通過使用$attrs實現元件之間的資料傳遞

元件之間傳遞資料的方式有很多種,之所以有這麼多種方式,是為了滿足在不同場景不同條件下的使用。 一般有三種方式: 通過

vuemethodscomputedwatch

1、computed屬性: 經過處理返回的資料值,只要源資料沒有發生改變,computed函式裡面對相應的資料就不會反生改變,相當於快取在本地;發生改變的時候,computed對應資料的函式才會發生改變。 2、computed屬性和methods屬性: 你可能已經注意到我們可以通過呼叫method來達到

Vue computedmethodswatch 的區別

<template> <div> <p>使用computed {{ message }}</p> <p>使用methods {{ message() }}<

vue computedmethods watch 區別(鄒文豐)

pre script 重新 lln reverse body utf 依賴 () <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <t

vue筆記之watchcomputedmethods的對比

1.computed:computed屬性的結果會被快取,除非依賴的響應式屬性變化才會重新計算,主要當作屬性來使用; <div id="app"> <!-- 1.我們要監聽到文字框資料的改變,這樣才能知道什麼時候去拼接出一個fullnam

Vuejs關於computedmethodswatch的區別。

Vue.js在模板表示式中限制了,繫結表示式最多隻能有一條表示式,但某些資料需要一條以上的表示式運算實現,此時就可以將此資料放在計算屬性(computed)當中。 Vuejs中關於computed、methods、watch的區別。 computed:計算屬性將被混入到 Vue 例項中。所有 get

vue : watchcomputed以及對象數組

origin ber this sub 改變 turn src gin 怎麽 watch和computed是vue框架中很重要的特性。 那麽,他們是怎麽作用於對象數組的? 今天我們就來探究一下。 上代碼。 <template> <d

vue : watchcomputed以及物件陣列

watch和computed是vue框架中很重要的特性。 那麼,他們是怎麼作用於物件陣列的? 今天我們就來探究一下。   上程式碼。 <template> <div class="hello"> {{ msg }} &l