computed、methods、watch

  • computed:計算屬性將被混入到 Vue 實例中。全部 getter 和 setter 的 this 上下文自動地綁定爲 Vue 實例。
  • methods:methods 將被混入到 Vue 實例中。能夠直接經過 VM 實例訪問這些方法,或者在指令表達式中使用。方法中的 this 自動綁定爲 Vue 實例。
  • watch:是一種更通用的方式來觀察和響應 Vue 實例上的數據變更。一個對象,鍵是須要觀察的表達式,值是對應回調函數。值也能夠是方法名,或者包含選項的對象。Vue 實例將會在實例化時調用 $watch(),遍歷 watch 對象的每個屬性。
通俗來說,
1. computed是在HTML DOM加載後立刻執行的,如賦值;
2. methods則必需要有必定的觸發條件才能執行,如點擊事件;
3. watch它用於觀察Vue實例上的數據變更。對應一個對象,鍵是觀察表達式,值是對應回調。值也能夠是方法名,或者是對象,包含選項。
因此他們的執行順序爲:默認加載的時候先computed再watch,不執行methods;等觸發某一事件後,則是:先methods再watch。

computed

  computed稱爲計算屬性,顧名思義,計算就要返回一個計算的結果,因此,當咱們要處理大量的邏輯,可是最後要取得最後的結果的時候能夠用computed。瀏覽器

簡單示例: 要求: 
<input type="text v-model="num1"><input type="text v-model="num2">
如今要返回num1和num2的和;
<script>
    new Vue({
        el:"#box",
        data:{
                num1:0,
                num2:0
                }
        computed:{    
                result:function(){
                        return this.num1 + this.num2    
                        // 計算屬性必須有一個返回值
                }
        }
     })
</script>

methods

  methods:是方法的意思,在js中,咱們把一些函數叫作方法,通常狀況下,要觸發這個方法就要執行,要執行就要有一個源來觸發,因此就須要一個事件源,這是和computed的一點不一樣之處。緩存

methods的示例:要求:
<button @click="do()">點擊彈出<\/button>
<script>
    new Vue({
        el:"#box",
        data:{
                num1:0,
                num2:0
                }
        methods:{    
                do:function(){
                      alert('ok')
                      //這裏根據狀況,能夠返回有返回值也能夠沒有返回值。
                }
        }
     })
</script>

對比computed 和 methods

  • computed計算的結果若是不發生改變就不會觸發result這個函數。而methods中通常都是定義的須要事件觸發的一些函數。每次只要觸發事件,就會執行對應的方法。
  • computed必須返回一個值頁面綁定的才能取得值,而methods中能夠只執行邏輯代碼,能夠有返回值,也能夠沒有。
  • 若是把computed中的方法寫到method中會浪費性能。
<div id="example">  
  <p>Original message: "{{ message }}"</p>  
  <p>Computed reversed message: "{{ reversedMessage }}"</p>  
</div>

var vm = new Vue({  
  el: '#example',  
  data: {  
    message: 'Hello'  
  },  
  computed: {  
    reversedMessage: function () {  
      return this.message.split('').reverse().join('')  
    }  
  },
  methods: {  
    reverseMessage: function () {  
      return this.message.split('').reverse().join('')  
    }  
  } 
}) 
  • 計算屬性只有在它的相關依賴發生改變時纔會從新取值。這就意味着只要 message 沒有發生改變,屢次訪問 reversedMessage 計算屬性會當即返回以前的計算結果,而沒必要再次執行函數。也就是說只要不是直接使用瀏覽器刷新頁面,當咱們改變數據、DOM操做等引發頁面從新渲染時,計算屬性會直接使用緩存,不會從新執行函數。適合那些計算量很大且改變頻率很低的屬性;
  • 若是使用methods,每次頁面從新渲染時都會從新執行methods函數。
  • 寫法上:computed計算屬性的方式在用屬性時不用加(),而methods方式在使用時要像方法同樣去用,必須加().
相關文章
相關標籤/搜索