一个小白的vue之路(五)——vue的computed属性、watch属性、methods
前言:在我们学习过程中肯定会遇到使用vue的computed属性的地方,但还有一个watch属性与之非常相似,又是有感觉把方法放入methods同样能解决问题,到底该如何使用,它们之间又有何区别,下面我们将详细的讲一下。
一、概念
我们要理解作者的设计用意,即它们的设计用意,即它们是用来做什么的。
computed:计算属性,一切复杂的运算都应该使用computed属性
watch::侦听器,watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以,它可以监控一个变量,也可以是一个对象。
methods:一个容器,方法再此声明,为了方便管理。
二、computed vs methods
我们来看一段官网上的代码:
<div id="example"> {{ message.split(' ').reverse().join(' ') }} </div>
模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。我们稍加改进,并以这个为例比较。
<div id="example"> {{newMessage}} {{newMessage}} {{newMessage()}} {{newMessage()}} </div> <script> var example=new({ el : "#example", data : { message : "123 456" }, computed : { newMessage : function(){ console.log("computed"); return this.message.split(' ').reverse().join(' '); } }, methods:{ newMessage : function(){ console.log("method"); return this.message.split(' ').reverse().join(' '); } } }) </script>
结果:
控制台输出的结果 : computed method method
这里computed里的newMessage和methods里的newMessage都被调用了两次,但computed里的newMessage只执行了一次。两种方式的最终结果确实是完全相同的。然而,不同的是计算属性是基于它们的依赖进行缓存的。我们可以看出computed只在相关依赖发生改变时它们才会重新求值。这就意味着只要 message 还没有发生改变,多次访问 newMessage 计算属性会立即返回之前的计算结果,而不必再次执行函数。相比之下,每当触发重新渲染时,调用方法将总会再次执行函数。多次执行开销巨大,当然官网中也说了你若不希望有缓存,你可以使用方法来代替。
三、computed vs watch
最简单直接的了解它们的不同我们来看一个例子:
<div id="demo"> </div> <script> var vm = new Vue({ el: '#demo', data: { firstName: 'Foo', lastName: 'Bar', fullName: 'Foo Bar' }, watch: { function(){ console.log("watch") } }, computed:{ function(){ console.log("computed") } } })
结果:只打印了“computed”。
因为computed的初始化都是在beforeCreated和created之间完成的,computed是一个计算属性它的第一次执行是不需要条件。
computed用来监控自己定义的变量,该变量不在data里面声明,但依赖于data里面的属性,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理;
watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以,它可以监控一个变量,也可以是一个对象。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。
好,就简单说这么多。要想加深理解,可以参考一下几篇文章:
阳光小点的博文《vue中watch的详细用法》
半年的半年的文章《深入理解 Vue Computed 计算属性》
郑凯的文章《Vue中的computed是在生命周期的哪个阶段执行的?》
- Vue中computed(计算属性)、methods、watch的区别
- vue 计算属性computed和观察watch 和方法methods
- Vue的计算属性computed、方法methods、侦听器watch的区别
- vue的 计算属性(computed)、methods、watched三者区别
- vue中计算属性(computed)、methods和watched之间的区别
- vue2 computed 计算属性和methods,watch的区别
- Vue中的methods、watch、computed
- vue学习04--[转发]Vuejs中computed、methods、watch的区别
- vue中computed & methods & watch 的区别
- vue.js重学之旅(2)——vue.js里的数据操作(data,methods,computed,watch)
- vue.js——computed属性与methods属性的区别
- vue学习05--Vuejs中computed、methods、watch的区别[2]
- Vue中computed,methods,watch用法上的异同
- sau交流学习社区—vue总结:使用vue的computed属性实现监控变量变化,使用vue的watch属性监控变量变化从而实现其他业务
- Vue计算属性computed:{}和侦听器watch:{}
- vue计算属性computed和methods的区别
- vue.js 计算属性及计算属性(computed)、methods、watched三者区别
- vue的计算属性(computed)、methods、watched三者区别
- Vue实例三个对象(methods,computed,watch)的差别
- vue从入门到进阶:计算属性computed与侦听器watch(三)