watch监听单个,computed监听多个
思考业务场景:
- 类似淘宝,当我输入某个人名字时,我想触发某个效果
- 利用vue做一个简单的计算器
当watch监听的是复杂数据类型的时候需要做深度监听(写法如下)
watch:{
msg:{
handler(val){
if(val.text=='love'){
alert(val.text)
}
},
deep:true//开启深度监听
}
}
computed 监视对象,写在了函数内部, 凡是函数内部有this.相关属性,改变都会触发当前函数
watch浅监听:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>watch和computed</title>
<script type="text/javascript" src="js/vue.min.js"></script>
</head>
<body>
<div id="app">
<div>watch监听数据</div>
<input type="text" v-model="msg">
</div>
</body>
<script type="text/javascript">
new Vue({
el:'#app',
data(){
return {
msg:''
}
},
watch:{
msg(newVal,oldVal){
if(newVal=='hello'){
alert('hello');
}
}
}
})
</script>
</html>
运行效果图:
watch深度监听:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>watch和computed</title>
<script type="text/javascript" src="js/vue.min.js"></script>
</head>
<body>
<div id="app">
<div>watch监听数据</div>
<input type="text" v-model="msg.text">
</div>
</body>
<script type="text/javascript">
new Vue({
el:'#app',
data(){
return {
msg:{text:''}
}
},
watch:{
msg:{
handler(newVal,oldVal){
if(newVal.text=='deep'){
alert(newVal.text);
}
},
deep:true //深度监听
}
}
})
</script>
</html>
运行效果图:
computed计算属性:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>watch和computed</title>
<script type="text/javascript" src="js/vue.min.js"></script>
</head>
<body>
<div id="app">
<div>computed计算属性</div>
(<input type="text" v-model="n1">+
<input type="text" v-model="n2">)*
<input type="text" v-model="n3">={{result}}
</div>
</body>
<script type="text/javascript">
new Vue({
el:'#app',
data(){
return {
n1:'',
n2:'',
n3:''
}
},
computed:{
result(){
return (Number(this.n1)+Number(this.n2)) * Number(this.n3)
}
}
})
</script>
</html>
运行效果图: