返回
Vue 中的 methods 和 computed 有什么区别?
前端
2023-10-26 15:04:16
1. 调用方式
computed 属性类似于普通 JavaScript 对象属性,当响应式数据值改变时,它會自动更新值。
// 定义一个computed属性
computed: {
fullName: function() {
// 在这里,我们可以像往常一样引用 this 对象
return this.firstName + ' ' + this.lastName;
}
}
你可以像往常引用对象属性一样引用computed属性,而无需显式地将其作为函数来执行。这使它们非常适合于具有派生值的属性,例如计算总价或用户姓名。
<div>
<!-- 这是一个带computed属性的示例 -->
<p>姓名: {{ computed.fullName }} </p>
</div>
另一方面,methods 属性类似于常规函数,但是它们绑定到 Vue 实例。这意味著您可以以正常方式来执行它们。
// 定义一个方法
methods: {
greetUser: function() {
// 同样,我们也可以像往常一样引用this
console.log(`你好 ${this.firstName} ${this.lastName}`);
}
}
当您执行方法时,您必须显式地将其作为函数来执行。这使得它们非常适合于那些需要执行 some action(例如,向API请求数据或更新用户资料)的属性。
<div>
<!-- 这是一个带method属性的示例 -->
<button @click="method.greetUser">问候</button>
</div>
2. 绑定方式
computed 属性与响应式数据进行绑定,而methods则与Vue实例进行绑定。这意味著在 computed 属性中,您可以引用父组件和全局数据,而方法只能引用当前组件和全局数据。
// 定义一个computed属性
computed: {
fullName: function() {
// 我们可以引用父组件的message
console.log(this.$parent.message);
}
}
// 定义一个方法
methods: {
greetUser: function() {
// 同样地,我们也可以引用父组件的message
console.log(this.$parent.message);
}
}
3. 性能
在性能上,computed 属性通常比 methods 属性更快。这是因为 computed 属性的重新计算只会在其依赖数据发生变化时进行,而 methods 属性在组件更新时总是被执行。因此,对于需要执行一些计算的属性,例如计算总价或用户姓名,使用 computed 属性是一个更优的选择。
结论
computed 属性和 methods 属性是实现 Vue 中响应式数据绑定的两个有用方法。两种方法的主要区别是 methods 属性必须显式地作为函数来执行,而 computed 属性则类似于常规对象属性,直接以对象属性方式直接引用。因此,computed 属性非常适合于那些需要在组件更新时执行的属性,例如计算总价或用户姓名。