很多时候 需要在视图中渲染的数据是通过 已经定义的多个变量通过逻辑计算返回的结果
如 已经定义 firstName lastName 现在需要渲染 fullName = firstName + lastName 的结果
实现方法有多种:
watch(侦听器)和computed(计算属性)都具备缓存机制 但是相比较 watch需要侦听大量依赖 computed相比简洁
所以 如果一个功能 如果可用以下多种方法实现 优先推荐 computed 语法简洁 性能也高
一. 插值表达式中包含计算逻辑(模板以显示为主 包含计算逻辑 不推荐)
<div id='app'>
{{firstName + ' ' + lastName + ' ' + age}} <br />
</div>
二.自定义方法
<body>
<div id='app'>
{{fullName()}} {{age}}
</div>
<script>
var app = new Vue({
el:"#app" ,
data:{
firstName:'Robert',
lastName: 'Downey' ,
age: 18
},
methods:{
fullName:function() {
console.log('计算了一次') ;
return this.firstName + ' ' + this.lastName ;
}
}
})
</script>
</body>
三.watch 侦听器 需要分别侦听所依赖的 多个变量 页面渲染时 侦听到变化执行 否则 加载之前缓存的值
<body>
<div id='app'>
{{fullName}} {{age}}
</div>
<script>
var app = new Vue({
el:"#app" ,
data:{
firstName:'Robert',
lastName: 'Downey' ,
age: 18 ,
fullName : "hello Vue"
},
watch:{
firstName:function() {
console.log('计算了一次') ;
this.fullName = this.firstName + ' ' + this.lastName ;
},
lastName:function() {
console.log('计算了一次') ;
this.fullName = this.firstName + ' ' + this.lastName ;
}
}
})
</script>
</body>
四.computed 计算属性 有缓存机制 性能高 推荐
<body>
<div id='app'>
{{fullName}} {{age}}
</div>
<script>
var app = new Vue({
el:"#app" ,
data:{
firstName:'Robert',
lastName: 'Downey' ,
age: 18
},
computed:{
fullName:function() {
console.log('计算了一次') ;
return this.firstName + ' ' + this.lastName ;
}
}
})
</script>
</body>