methods
methods是一个vue对象中的属性,而在这个属性中,写的是种种要实现的方法.
computed
computed是一个属性,在属性中写的也是要实现的方法,那其中同方法一样的写法,总是让人觉得这里面要调用计算属性中的一个成员要用方法的形式,但实际上不用这样
那么问题就来了,既然这两个的作用都一样,那么有什么区别呢
computed在创建后只会调用一次其中的函数,而methods只要你每创建一个,就会调用一个,那么执行方法也需要不少时间,如果是只要调一两次方法倒还好说,如果有上百个次,那么它们的差异就不言而喻了。
接下来验证下它们的差异
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="vue.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div id="app">
<h2>{{fullName}}</h2>
<h2>{{fullName}}</h2>
<h2>{{fullName}}</h2>
<h2>{{fullName}}</h2>
<h2>{{fullName}}</h2>
<h2>{{getFullName()}}</h2>
<h2>{{getFullName()}}</h2>
<h2>{{getFullName()}}</h2>
<h2>{{getFullName()}}</h2>
<h2>{{getFullName()}}</h2>
</div>
</body>
<script type="text/javascript">
let computed_count=1,methods_count=1;
var vm=new Vue({
el:'#app',
data:{
firstname:'Sherlock',
lastname:'Holmes',
},
computed:{
fullName()
{
console.log('computed_times='+computed_count);
computed_count++;
return this.firstname+' '+this.lastname;
}
},
methods:{
getFullName()
{
console.log('methods_times='+methods_count);
methods_count++;
return this.firstname+' '+this.lastname;
}
}
});
</script>
</html>
输出的结果自然没什么不同
但是在这里就能看出差异,computed计算属性中的方法只是执行了一次,而methods中的方法却执行了五次.
得出结论,如果要频繁的调用一个方法,那么应该放在computed计算属性中.相反,如果只需要调用一两次,那么选用methods可能更为合适
如有不足,欢迎指正