Vue计算属性是Vue实例的属性,用来根据已有的数据进行计算得到新的数据。计算属性的值会根据它的依赖缓存起来,在依赖没有发生改变时直接返回缓存的值,提高了性能。
计算属性的定义方式为在Vue实例中使用computed
关键字,并将计算属性的名字作为键,计算属性的值为一个函数,函数返回需要计算的值。
以下是一个使用计算属性的例子:
var vm = new Vue({
el: '#app',
data: {
message: 'Hello Vue.js'
},
computed: {
reversedMessage: function () {
return this.message.split('').reverse().join('');
}
}
})
这个例子中,reversedMessage
是一个计算属性,它根据message
的值进行计算并返回计算结果。每次使用reversedMessage
时,如果message
的值没有发生改变,就会直接返回之前缓存的计算结果,而不需要再次计算。
计算属性还可以设置getter
和setter
,用于监听和响应数据的变化。在计算属性的对象中,可以使用get
和set
关键字来定义getter
和setter
方法。
var vm = new Vue({
el: '#app',
data: {
firstname: '张',
lastname: '三'
},
computed: {
fullName: {
get: function () {
return this.firstname + '-' + this.lastname;
},
set: function (newValue) {
var names = newValue.split('-');
this.firstname = names[0];
this.lastname = names[1];
}
}
}
})
在这个例子中,fullName
是一个计算属性,它的getter
方法返回firstName
和lastName
拼接而成的字符串,setter
方法则接受一个新值,并根据新值的格式重新设置firstName
和lastName
的值。
完整代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计算属性姓名案例</title>
<!--引入vue-->
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="root">
姓:<input type="text" v-model="firstname"><br>
名:<input type="text" v-model="lastname"><br>
姓名:<span>{{fullname}}</span><br>
</div>
<script type="text/javascript">
Vue.config.productionTip=false;
new Vue({
el:"#root",
data:{
firstname:'张',
lastname:'三'
},
computed:{
fullname: {
get() {//当有人读取fullname时。get就会被调用,且返回值就作为fullname的值
//get什么时候调用? 1、初次读取fullname时。2、所依赖的数据发生变化时。
return this.firstname+'-'+this.lastname;
},
//set什么时候被调用?当fullname被修改时。
set(newvalue) {
const arr = newvalue.split('-');
this.firstname=arr[0];
this.lastname=arr[1];
}
}
}
})
</script>
</body>
</html>
总结