vue 中计算属性(computed)和监听器(watch)

410 阅读1分钟

计算属性和监听器

模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的,在模板中放入太多的逻辑会让模板过重且难以维护,此时就可以考虑计算属性和监听器。

<p>
 <!-- 绑定表达式-->
 <!-- 课程总数:{{courses.length + '门'}}-->
 <!-- 计算属性-->
 <!-- 课程总数:{{total}}-->
 <!--监听器-->
 课程总数:{{totalCount}}
</p>
<script>
    const app = new Vue({
        computed: {
        	total() {
            	return  this.courses.length + '门'
            }
        },
// 下面这种不能生效,因为初始化时不会触发 
// watch: {
//   courses(newValue, oldValue) {
   		this.totalCount = newValue.length + '门'
//	}
// },
	watch: {
this.totalCount = newValue.length + '门'
courses: {
    immediate: true,
    // deep: true,
    handler(newValue, oldValue) {
this.totalCount = newValue.length + '门'
}
}
},
 })
</script>
//
//     }
// },

计算属性和监听器

计算属性 vs 监听器

  • 监听器更通用 ,理论上计算属性能实现的侦听器也能实现
  • 处理数据的场景不同,监听器适合一个数据影响多个数据,计算属性适合一个数据受多个数据影响
  • 计算属性有缓存性,计算所得的值如果没有变化不会重复执行
  • 监听器适合执行异步操作或较大的开销操作的情况