目录
在 Vue 开发中,计算属性(computed)是一个非常重要的特性,它可以对数据进行二次计算,为我们的开发带来了很大的便利。本文将结合 Vue2 和 Vue3 的特点,深入探讨 computed 计算属性,并附上相关代码示例。
一、Vue2 中的 Computed 计算属性
在 Vue2 中,computed 计算属性有两种常见的写法。
1. 简单写法
以下是一个 Vue2 中计算属性的简单示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<p>AABC 数据:{{AABC}}</p>
<p>计算属性结果:{{changeSTR}}</p>
<button @click="changeValue">点击改变</button>
</div>
<script>
new Vue({
el: '#app',
data() {
return {
AABC: 'AABC',
ITR: 'initialValue'
};
},
computed: {
changeSTR() {
return this.ITR.slice(-1);
}
},
methods: {
changeValue() {
// 在 Vue2 中,直接修改计算属性会报错
// this.changeSTR = 'newValue';
}
}
});
</script>
</body>
</html>
在上述代码中,我们定义了一个 Vue 实例,其中包含一个数据属性AABC
和ITR
,以及一个计算属性changeSTR
,它通过对ITR
进行切片操作,返回最后一位字符。当我们点击按钮时,尝试直接修改计算属性会报错,因为在 Vue2 中计算属性是只读的。
2. get 和 set 写法
如果我们想要修改计算属性的值,可以使用get
和set
的写法:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<p>AABC 数据:{{AABC}}</p>
<p>计算属性结果:{{changeSTR}}</p>
<button @click="changeValue">点击改变</button>
</div>
<script>
new Vue({
el: '#app',
data() {
return {
AABC: 'AABC',
ITR: 'initialValue'
};
},
computed: {
changeSTR: {
get() {
return this.ITR.slice(-1);
},
set(value) {
this.ITR = value;
}
}
},
methods: {
changeValue() {
this.changeSTR = 'newValue';
}
}
});
</script>
</body>
</html>
在这种写法中,我们可以通过get
方法获取计算属性的值,通过set
方法设置计算属性的值。当我们点击按钮时,调用changeValue
方法,修改计算属性changeSTR
的值,实际上会通过set
方法修改ITR
的值,从而触发计算属性的重新计算。
二、Vue3 中的 Computed 计算属性
在 Vue3 中,计算属性的用法与 Vue2 类似,但也有一些细微的变化。
1. 简单写法
以下是一个 Vue3 中计算属性的简单示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
<div id="app">
<p>AABC 数据:{{AABC}}</p>
<p>计算属性结果:{{changeSTR}}</p>
<button @click="changeValue">点击改变</button>
</div>
<script>
const App = {
data() {
return {
AABC: 'AABC',
ITR: 'initialValue'
};
},
computed: {
changeSTR() {
return this.ITR.slice(-1);
}
},
methods: {
changeValue() {
// 在 Vue3 中,直接修改计算属性同样会报错
// this.changeSTR = 'newValue';
}
}
};
const app = Vue.createApp(App);
app.mount('#app');
</script>
</body>
</html>
2. get 和 set 写法
Vue3 中也可以使用get
和set
的写法来修改计算属性的值:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
<div id="app">
<p>AABC 数据:{{AABC}}</p>
<p>计算属性结果:{{changeSTR}}</p>
<button @click="changeValue">点击改变</button>
</div>
<script>
const App = {
data() {
return {
AABC: 'AABC',
ITR: 'initialValue'
};
},
computed: {
changeSTR: {
get() {
return this.ITR.slice(-1);
},
set(value) {
this.ITR = value;
}
}
},
methods: {
changeValue() {
this.changeSTR = 'newValue';
}
}
};
const app = Vue.createApp(App);
app.mount('#app');
</script>
</body>
</html>
在 Vue3 中,使用get
和set
写法修改计算属性的值与 Vue2 类似,通过set
方法修改数据属性的值,从而触发计算属性的重新计算。
三、总结
无论是 Vue2 还是 Vue3,计算属性都是一个非常强大的特性,可以帮助我们简化代码,提高开发效率。在使用计算属性时,我们需要注意以下几点:
- 计算属性是基于它们的响应式依赖进行缓存的,只有在它们的依赖发生变化时才会重新计算。
- 在 Vue2 和 Vue3 中,默认情况下计算属性是只读的,如果想要修改计算属性的值,需要使用
get
和set
的写法。 - 在面试中,可能会问到关于计算属性的问题,例如计算属性的结果值可以修改吗?答案是可以的,但需要通过特定的写法。