Vue2.0 【第三季】第4节 Watch选项 监控数据

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>

效果和上面是一样的。

猜你喜欢

转载自www.cnblogs.com/Elva3zora/p/12505918.html
今日推荐