zoukankan      html  css  js  c++  java
  • 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>
    

    效果和上面是一样的。

    Keep moving on!
  • 相关阅读:
    20181030-4 每周例行报告
    20181023-3 每周例行报告
    20181016-10 每周例行报告
    PSP总结报告
    第十二周例行报告
    对团队成员公开感谢
    第十一周例行报告
    第十周例行报告
    第九周例行报告
    第八周例行报告
  • 原文地址:https://www.cnblogs.com/Elva3zora/p/12505918.html
Copyright © 2011-2022 走看看