首頁 > web前端 > js教程 > 主體

深入淺析Vue.js中 computed和methods不同機制

亚连
發布: 2018-05-26 16:06:18
原創
1415 人瀏覽過

這篇文章為大家介紹了Vue.js中computed和methods不同機制,在vue.js中,methods和computed兩種方式來動態當作方法使用,文中還給大家提到了computed和methods的區別,有興趣的朋友一起看看吧

在vue.js中,有methods和computed兩種方式來動態當作方法來用的

1.首先最明顯的不同就是呼叫的時候,methods要加上()

2.我們可以使用methods 來替代computed,效果上兩個都是一樣的,但是computed 是基於它的依賴緩存,只有相關依賴發生改變時才會重新取值。

而使用methods ,在重新渲染的時候,函數總是會重新呼叫執行

為了方便理解,先上一段原始碼

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>title</title>
    <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
  </head>
  <body>
    <p class="test">  <!--computed计算属性-->
      <p>{{now}}</p>
      <p>{{now}}</p>
      <p>{{now}}</p>
      <p>{{now}}</p>
      <hr />      <!--横线分割-->
</p>
    <p class="test2">  <!--methods方法,注意new()加了括号-->
      <p>{{now()}}</p>
      <p>{{now()}}</p>
      <p>{{now()}}</p>
      <p>{{now()}}</p>
    </p>
  </body>
  <script type="text/javascript">
    var myVue = new Vue({
      el: ".test",
      computed: {
        now: function() {
          var yanshi = 0;
          for(var o = 0; o < 2000; o++) {   //延时
            for(var q = 0; q < 2000; q++) {
              yanshi++;
            }
          }
          return Date.now()
        }
      }
    });
    var vue2 = new Vue({
      el: &#39;.test2&#39;,
      methods: {
        now: function() {
          var yanshi = 0;
          for(var o = 0; o < 2000; o++) {
            for(var q = 0; q < 2000; q++) {
              yanshi++;
            }
          }
          return Date.now()
        }
      }
    })
  </script>
</html>
登入後複製

#運行結果如上,可以看出computed計算屬性的話,每次進入頁面將一直沿用第一次的信息,不會再觸發now,這就是依賴緩存。 (有延遲的情況下多次輸出時間相同)

那什麼是相關依賴發生改變時才會重新取值呢比方說reversedMessage function()計算屬性中調用了message變數

就意味著只要message 還沒有改變,多次造訪reversedMessage 計算屬性會立即傳回先前的計算結果,而不必再執行函數。

而methods是即時的,在重新渲染時,函數總是會重新呼叫執行,不會緩存,(多次輸出時間不同)

可以說使用computed 效能會更好,但是如果你不希望緩存,你可以使用methods 屬性。

computed 屬性預設只有 getter ,不過在需要時你也可以提供一個 setter :所以其實computed也是可以傳參的。

ps:下面看vue計算屬性computed和methods的差異

##

在new Vue的配置参数中的computed和methods都可以处理大量的逻辑代码,但是什么时候用哪个属性,要好好区分一下才能做到正确的运用vue。
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:是方法的意思,在js中,我们把一些函数叫做方法,一般情况下,要触发这个方法就要执行,要执行就要有一个源来触发,所以就需要一个事件源。这是和computed的一点不同之处;
methods的示例:
要求:
<\button @click="do()">点击弹出<\/button>
<script>
  new Vue({
    el:"#box",
    data:{
        num1:0,
        num2:0
        }
    methods:{  
        do:function(){
           alert(&#39;ok&#39;)
           //这里根据情况,可以返回有返回值也可以没有返回值。
        }
    }
   })
</script>
对比computed 和 methods:
computed计算的结果如果不发生改变就不会触发result这个函数。而methods中一般都是定义的需要事件触发的一些函数。每次只要触发事件,就会执行对应的方法。如果把computed中的方法写到method中会浪费性能。
computed必须返回一个值页面绑定的才能取得值,而methods中可以只执行逻辑代码,可以有返回值,也可以没有。
登入後複製

#上面是我整理給大家的,希望未來會對大家有幫助。

相關文章:

Boa伺服器下的ajax與cgi通訊(圖文教學)

Ajax呼叫restful接口傳送Json格式資料的方式(附有程式碼)

IE8用ajax存取不能每次都刷新的問題

以上是深入淺析Vue.js中 computed和methods不同機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板