Vue2.0 【第三季】第4节 Watch选项 监控数据
第4节 Watch选项 监控数据
数据变化的监控经常使用,我们可以先来看一个简单的数据变化监控的例子。例如天气预报的穿衣指数,它主要是根据温度来进行提示的,当然还有其它的,咱们就不考虑了。
一、看一个监控变化的案例
温度大于26度时,我们建议穿T恤短袖,温度小于26度大于0度时,我们建议穿夹克长裙,温度小于0度时我们建议穿棉衣羽绒服。
先来模拟一个温度变化的情况:我们使用按钮来加减温度。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>watch option</title>
<script type="text/javascript" src="../assets/js/vue.js"></script>
</head>
<body>
<h1>watch option</h1>
<hr>
<div id="app">
<p>今日温度:{{wendu}}度</p>
<p>穿衣建议:{{chuanyi}}</p>
<p><button @click="shenggao">升高温度</button><button @click="jiangdi">降低温度</button></p>
</div>
<script type="text/javascript">
var app = new Vue({
el:'#app',
data:{
wendu:14,
chuanyi:'夹克长裙'
},
methods:{
shenggao:function(){
this.wendu+=5;
},
jiangdi:function(){
this.wendu-=5;
}
}
})
</script>
</body>
</html>
浏览器效果:
二、用实例属性写watch监控
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>watch option</title>
<script type="text/javascript" src="../assets/js/vue.js"></script>
</head>
<body>
<h1>watch option</h1>
<hr>
<div id="app">
<p>今日温度:{{wendu}}度</p>
<p>穿衣建议:{{chuanyi}}</p>
<p><button @click="shenggao">升高温度</button><button @click="jiangdi">降低温度</button></p>
</div>
<script type="text/javascript">
var app = new Vue({
el:'#app',
data:{
wendu:14,
chuanyi:'夹克长裙'
},
methods:{
shenggao:function(){
this.wendu+=5;
},
jiangdi:function(){
this.wendu-=5;
}
},
watch:{
wendu:function(newVal,oldVal){
if(newVal>=26){
this.chuanyi="T恤短袖";
}else if(newVal<26 && newVal>0){
this.chuanyi="夹克长裙";
}else{
this.chuanyi="棉衣羽绒服";
}
}
}
})
</script>
</body>
</html>
浏览器效果:
但一般在js中不这么写,用一个数组把值存起来:
var chuanyiarray=['T恤短袖','夹克长裙','棉衣羽绒服'];
var app = new Vue({
el:'#app',
data:{
wendu:14,
chuanyi:'夹克长裙'
},
methods:{
shenggao:function(){
this.wendu+=5;
},
jiangdi:function(){
this.wendu-=5;
}
},
watch:{
wendu:function(newVal,oldVal){
if(newVal>=26){
this.chuanyi=chuanyiarray[0];
}else if(newVal<26 && newVal>0){
this.chuanyi=chuanyiarray[1];
}else{
this.chuanyi=chuanyiarray[2];
}
}
}
})
有些时候我们会用实例属性的形式来写watch监控。也就是把我们watch卸载构造器的外部,这样的好处就是降低我们程序的耦合度,使程序变的灵活。
app.$watch('xxx',function(){})
还是上边的案例我们改成实例方法的模式:
app.$watch('temperature',function(newVal,oldVal){
if(newVal>=26){
this.suggestion=suggestion[0];
}else if(newVal<26 && newVal >=0)
{
this.suggestion=suggestion[1];
}else{
this.suggestion=suggestion[2];
}
})
全部代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>watch option</title>
<script type="text/javascript" src="../assets/js/vue.js"></script>
</head>
<body>
<h1>watch option</h1>
<hr>
<div id="app">
<p>今日温度:{{wendu}}度</p>
<p>穿衣建议:{{chuanyi}}</p>
<p><button @click="shenggao">升高温度</button><button @click="jiangdi">降低温度</button></p>
</div>
<script type="text/javascript">
var chuanyiarray=['T恤短袖','夹克长裙','棉衣羽绒服'];
var app = new Vue({
el:'#app',
data:{
wendu:14,
chuanyi:'夹克长裙'
},
methods:{
shenggao:function(){
this.wendu+=5;
},
jiangdi:function(){
this.wendu-=5;
}
}
app.$watch('wendu',function(newVal,oldVal){
if(newVal>=26){
this.chuanyi=chuanyiarray[0];
}else if(newVal<26 && newVal>0){
this.chuanyi=chuanyiarray[1];
}else{
this.chuanyi=chuanyiarray[2];
}
});
</script>
</body>
</html>
效果和上面是一样的。