对于刚开始学习Vue的开发者来说,十分容易混淆Vue中计算属性、方法和侦听属性,希望通过本文的介绍,我们可以浅层次了解三者区别。
-
- <body>
- <div id="app">
- <h1>计算属性:computedh1>
- {{fullName}}
- <h1>方法:methodsh1>
- {{fullName2()}}
- <h1>侦听器:watchh1>
- {{watchFullName}}
- <h1>年龄:ageh1>
- {{age}}
- div>
-
- <script>
- var other = 'This is other';
- const vm = new Vue({
- el: '#app',
- data() {
- return {
- firstName: "zhang",
- lastName: "san",
- watchFullName: "zhangsan",
- age: 18,
-
- }
- },
- methods: {
- fullName2() {
- console.log('调用fullName2,使用了一次方法');
- return this.firstName + this.lastName + ',' + other;
- }
- },
- computed: {
- fullName() {
- console.log('调用fullName,计算一次属性');
- return this.firstName + this.lastName + ',' + other
- }
- },
- watch: {
- firstName(val) {
- console.log('调用watchFullName,使用了一次监听');
- this.watchFullName = this.firstName + this.lastName + "," + other
- },
- lastName(val) {
- console.log('调用watchFullName,使用了一次监听');
- this.watchFullName = this.firstName + this.lastName + "," + other
- }
- }
- })
- script>
- body>



1.5 控制台看效果:第五次,修改firstName
1.6测试结论:
缓存功能1,计算属性computed是基于它们的依赖进行缓存的,只有相关依赖会发生改变时才会重新求值。只要相关依赖未改变,只会返回缓存中的结果,不会执行函数。
而methods,只要调用它,函数就会执行
2, computed和watch的区别
computed可以观察多个数据,watch只能是一个数据
computed生成一个新的数据,直接渲染至视图中,watch是修改本身已经存在的数据
computed不可以执行异步的,因为需要返回值,返回值是由js主线程控制,watch可以执行异步的,因为不需要返回数据,定时器是属于异步的线程
- <script>
- const vm = new Vue({
- el: '.app',
- data() {
- return {
- fristName: '张',
- lastName: '三',
- fullName:'张三'
- }
- // return {
- // isHot: true,
- // }
- },
- // 总结:计算属性里不能完成异步任务
- // computed: {
- // fullName(){
- // setTimeout (()=>{//定时器,等一些不被vue管理的回调函数为普通函数时,在vue里this指向window
- // // 为箭头函数,this指向vm
- // console.log(this);
- // return this.fristName+'-'+this.lastName
- // }, 2000);
- // }
- // },
-
- watch: {//命令式监测,重复
- fristName(val) {
- setTimeout(() => {
- console.log('2秒后我执行了');
- this.fullName = val + '-' + this.lastName
- }, 2000);
-
- },
- lastName(val){
- setTimeout(() => {
- console.log('两秒后我执行了');
- this.fullName=this.fristName+'-'+val
- }, 2000);
-
- }
-
- }
所有被Vue管理的函数,要写成普通函数,this指向vm,不被vue管理的函数比如(定时器,ajax,promise等回调函数)写成箭头函数,目的是让this指向vm。