我们通过一个简单的例子来了解下三者的区别:
加入我们在vue中定义了一个人的姓和名,如果我们想把姓和名组合输出怎么办呢?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="js/vue.js"></script>
</head>
<body>
<div id="app">
</div>
</body>
<script type="text/javascript">
var vm=new Vue({
el:"#app",
data:{
firstName:"Dell",
laseName: "Lee",
age:28
}
</script>
</html>
1、vue给我们提供了一个特别好的解决方案叫:计算属性
计算属性是vue实例中的一个配置选项:computed
通常里面都是一个个计算相关的函数,返回最后计算出来的值。
即我们可以把这些计算的过程写到一个计算属性中去,然后让它动态的计算。
我们来看看,
computed:
{
fullName:function()
{
console.log("计算了一次")
return this.firstName+" "+this.laseName
}
}
然后在div中加入如下代码:
{{fullName}}
{{age}}
计算属性,存在内置缓存,当依赖的变量没有发生改变时,就不会进行计算,而是显示上一次的值。
我们通过在控制台输出来看看
当改变age时并没有在重新计算
2、方法
methods:
{
fullName:function()
{
console.log("计算一次")
return this.firstName+" "+this.laseName
}
}
然后再div中加入代码
{{fullName()}}
{{age}}
但是在方法中当改变没有依赖的变量时,也会调用一次函数
3、最后就是添加侦听器
先在data中添加fullName:“Dell Lee”,因为我们要对firstName和laseName进行监听
watch:
{
firstName:function()
{
console.log("计算一次")
this.fullName=this.firstName+" "+this.laseName
},
laseName:function()
{
console.log("计算一次")
this.fullName=this.firstName+" "+this.laseName
}
}
同时我们也来验证看改变没有以来的变量看会不会执行监听函数
很明显不会,当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过AngularJS。然而,通常更好的做法是使用计算属性而不是命令式的 watch 回调。