實例分析Vue.js中 computed和method不同機制
阿新 • • 發佈:2017-09-12
java meta 取值 源碼 otc 它的 round div 兩種
在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也是可以傳參的。
實例分析Vue.js中 computed和method不同機制