我想弄清楚什么时候调用方法属性,而不是什么时候最好调用一个计算属性。在我看来,计算通常是可取的,因为任何时候访问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是否必须运行每个相关的属性?什么时候方法比计算的属性更好?