国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 15:20:25
字體:
供稿:網(wǎng)友

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

1.首先最明顯的不同 就是調(diào)用的時候,methods要加上()

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

而使用 methods ,在重新渲染的時候,函數(shù)總會重新調(diào)用執(zhí)行

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

<!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>    <div class="test">  <!--computed計算屬性-->      <p>{{now}}</p>      <p>{{now}}</p>      <p>{{now}}</p>      <p>{{now}}</p>      <hr />      <!--橫線分割--></div>    <div class="test2">  <!--methods方法,注意new()加了括號-->      <p>{{now()}}</p>      <p>{{now()}}</p>      <p>{{now()}}</p>      <p>{{now()}}</p>    </div>  </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: '.test2',      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>

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

那什么是相關(guān)依賴發(fā)生改變時才會重新取值呢 比方說reversedMessage function()計算屬性中調(diào)用了message變量

就意味著只要 message 還沒有發(fā)生改變,多次訪問 reversedMessage 計算屬性會立即返回之前的計算結(jié)果,而不必再次執(zhí)行函數(shù)。

而methods是實時的,在重新渲染時,函數(shù)總會重新調(diào)用執(zhí)行,不會緩存,(多次輸出時間不同)

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

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

ps:下面看下vue計算屬性computed和methods的區(qū)別

在new Vue的配置參數(shù)中的computed和methods都可以處理大量的邏輯代碼,但是什么時候用哪個屬性,要好好區(qū)分一下才能做到正確的運用vue。computed稱為計算屬性,顧名思義,計算就要返回一個計算的結(jié)果,所以,當我們要處理大量的邏輯,但是最后要取得最后的結(jié)果的時候可以用computed;簡單示例:要求:<input type="text v-model="num1"><input type="text v-model="num2">現(xiàn)在要返回num1和num2的和;<script>  new Vue({    el:"#box",    data:{        num1:0,        num2:0        }    computed:{          result:function(){            return this.num1 + this.num2              // 計算屬性必須有一個返回值        }    }   })</script>methods:是方法的意思,在js中,我們把一些函數(shù)叫做方法,一般情況下,要觸發(fā)這個方法就要執(zhí)行,要執(zhí)行就要有一個源來觸發(fā),所以就需要一個事件源。這是和computed的一點不同之處;methods的示例:要求:</button @click="do()">點擊彈出<//button><script>  new Vue({    el:"#box",    data:{        num1:0,        num2:0        }    methods:{          do:function(){           alert('ok')           //這里根據(jù)情況,可以返回有返回值也可以沒有返回值。        }    }   })</script>對比computed 和 methods:computed計算的結(jié)果如果不發(fā)生改變就不會觸發(fā)result這個函數(shù)。而methods中一般都是定義的需要事件觸發(fā)的一些函數(shù)。每次只要觸發(fā)事件,就會執(zhí)行對應的方法。如果把computed中的方法寫到method中會浪費性能。computed必須返回一個值頁面綁定的才能取得值,而methods中可以只執(zhí)行邏輯代碼,可以有返回值,也可以沒有。            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 郴州市| 临潭县| 江城| 旬邑县| 新泰市| 金门县| 深圳市| 潢川县| 上犹县| 蒲江县| 西乌珠穆沁旗| 缙云县| 彩票| 洛隆县| 崇明县| 隆安县| 哈尔滨市| 旬阳县| 苍山县| 昌邑市| 临漳县| 奇台县| 临西县| 巴里| 宾阳县| 永嘉县| 偏关县| 吴江市| 西林县| 湘潭县| 淄博市| 玛多县| 普兰县| 饶平县| 图们市| 东明县| 山阳县| 海城市| 曲麻莱县| 玛沁县| 尼勒克县|