我想弄清楚什麼時候調用方法屬性,而不是什麼時候最好調用一個計算屬性。在我看來,計算通常是可取的,因爲任何時候訪問DOM的方法都會響應一個方法。Vue.js方法vs計算屬性。他們如何與DOM交互
在下面的代碼中,兩個按鈕跟蹤一個增加1的基本計數器。相同的輸出通過方法和計算屬性傳遞給DOM。每個增量都會觸發控制檯中顯示的計算屬性和方法屬性。
<div id="content">
<!--counter control-->
<button v-on:click="counter++">Increase Counter</button>
<button v-on:click="counter--">Decrease Counter</button>
<!--counter output-->
<p>{{counter}}</p>
<p>{{ resultMethod() }}</p>
<p>{{ resultComputed }}</p>
</div>
<script>
new Vue({
el: '#content',
data: {
counter: 0
},
computed: {
resultComputed: function(){
console.log("computed.result was run");
return this.counter < 5 ? 'small_number' : 'LARGENUMBER';
}
},
methods: {
resultMethod: function(){
console.log("methods.result was run");
return this.counter < 5 ? 'small_number' : 'LARGENUMBER';
}
}
})
</script>
現在,如果我們加上另一對夫婦的數據屬性我們可以看出,跟蹤他們不會導致方法或將被觸發的計算性能。
<!--new data options-->
<button v-on:click="secondCounter++">Second Counter</button>
<button v-on:click="formSubmit=true">Form Submit</button>
//New Data Properties
secondCounter: 0,
formSubmit: false
現在顯示這些數據屬性的DOM表示第一次的數據的確被正確跟蹤,和第二這些動作觸發相同的方法財產作爲我們的櫃檯,即使這些變量都沒有涉及這個方法。
<p>{{secondCounter}}</p>
<p>{{formSubmit}}</p>
最後,如果我們創建了一個完全隨機的,不相關的方法,並在DOM引用它,這也將被稱爲每次我們的任何變量都從DOM改變。我用這個簡單的方法作爲例子。
<h2>{{ unrelatedMethod() }}</h2>
unrelatedMethod: function(){
console.log("We are now using another random method");
var number = 2000;
return number;
}
那麼幕後究竟發生了什麼?每當DOM被更新時,Vue是否必須運行每個相關的屬性?什麼時候方法比計算的屬性更好?