您好,登錄后才能下訂單哦!
在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> <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>
運行結果如上,可以看出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('ok') //這里根據情況,可以返回有返回值也可以沒有返回值。 } } }) </script> 對比computed 和 methods: computed計算的結果如果不發生改變就不會觸發result這個函數。而methods中一般都是定義的需要事件觸發的一些函數。每次只要觸發事件,就會執行對應的方法。如果把computed中的方法寫到method中會浪費性能。 computed必須返回一個值頁面綁定的才能取得值,而methods中可以只執行邏輯代碼,可以有返回值,也可以沒有。
總結
以上所述是小編給大家介紹的Vue.js中 computed和methods不同機制,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。