天气案例————温开水的复习笔记

一、原生JavaScript

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>天气案例(原生JavaScript)</title>
</head>
<body>
    <div id="root">
        今天天气很<h2 id="weather"></h2>
        <button id="btn">切换天气</button>
    </div>
    <script>
        let btn = document.querySelector('#btn');
        let weather = document.querySelector('#weather');
        let isHot = false;
        weather.textContent = '凉爽';
        btn.addEventListener('click',function(){
            isHot = !isHot;
            if(isHot){
                weather.textContent = '炎热';
            }
            else{
                weather.textContent = '凉爽';
            }
        })
    </script>
</body>
</html>

评价

总感觉很乱,感觉东西一旦多起来就会让可读性变差,感觉数据和操作是杂糅在一起的。

二、原生JavaScript改进

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>天气案例(原生JavaScript)</title>
</head>
<body>
    <div id="root">
        今天天气很<h2 id="weather">凉爽</h2>
        <button id="btn">切换天气</button>
    </div>
    <script>
        let btn = document.querySelector('#btn');
        let weather = document.querySelector('#weather');
        //闭包,写一个接口,数据和对应的数据操作
        function changeWeather(){
            // 数据
            let weatherAtt=[
                '凉爽','炎热'
            ];
            let isHot = false;
            // 数据操作
            function change(){
                isHot = !isHot;
                if(isHot){
                    weather.textContent = weatherAtt[1];
                }
                else{
                    weather.textContent = weatherAtt[0];
                }
            }
            // 完成闭包
            return {change:change};
        }
        const changeweather = new changeWeather();
        // 调用接口
        btn.addEventListener('click',changeweather.change);
    </script>
</body>
</html>

评价

闭包,数据和对应的接口。我感觉可读性要好一点,应该就是将事件监听里的事件内容分离开来了,让事件监听函数的理解更加清晰。业务逻辑分离开来(乱说一通,(#^.^#))。

三、使用Vue框架

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>案例</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
    <!-- 准备容器 -->
    <div id="root">
        <p v-text="info"></p>
        <!-- 与 <p>{{info}}</p> 一样 -->
        <button @click="changeWeather">切换天气</button>
    </div>
    <script>
        new Vue({
            el:'#root',
            data:{
                isHot:false,
                info:'凉爽',
            },
            methods: {
                changeWeather(){
                    this.isHot = !this.isHot;
                    if(this.isHot===true){
                        this.info = '炎热';
                        // return this.info;
                        console.log(this.info);
                    }
                    else{
                        this.info = '凉爽';
                        // return this.info;
                        console.log(this.info);
                    }
                }
            },
        })
    </script>
</body>
</html>

评价

感觉和前面JavaScript原生改进方法很相似,不过是使用了框架,自己要书写的代码更加简洁和可读性更高。不过怎么感觉有点不怎么好,就是那个data总是在变。

四、Vue改进方案一(使用计算属性)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>案例</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
    <!-- 准备容器 -->
    <div id="root">
        (1)今天天气很<p v-text="info"></p>
        <p>(2)今天天气很{{info}}</p>
        <button @click="changeWeather">切换天气</button>
    </div>
    <script>
        new Vue({
            el:'#root',
            data:{
                isHot:false
            },
            computed:{
                // 简写形式
                info(){
                    return this.isHot?'凉爽':'炎热';
                }
                // 完整形式
                // weather:{
                //     get(){
                //         return this.isHot?'凉爽':'炎热';
                //     }
                //     set(){
                // 
                // }
                // }
                
            },
            methods: {
                changeWeather(){
                    this.isHot = !this.isHot;
                    // return this.info;
                }
            },
        })
    </script>
</body>
</html>

评价

不断修改isHot的值来达到计算属性的改变,来达到模板语法的不断重新解析

  

五、Vue改进方案二(监视属性)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>案例</title>
    <!-- 引入Vue -->
    <script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
    <!-- 准备容器 -->
    <div id="root">
        <p>今天天气很{{info}}</p>
        <button @click="changeWeather">切换天气</button>
    </div>
    <script>
        new Vue({
            el:'#root',
            data:{
                isHot:true
            },
            computed:{
                // 简写形式
                info(){
                    return this.isHot?'炎热':'凉爽';
                }
            },
            methods: {
                changeWeather(){
                    this.isHot = !this.isHot;
                }
            },
            watch:{
                isHot:{
                    immediate:true,
                    // handler什么时候被调用,当isHot发生改变时。
                    handler(newvalue,oldvalue){
                        console.log('isHot被修改了',newvalue,oldvalue);
                    }
                }
            }
            
        })
    </script>
</body>
</html>

监视属性watch:
    1.当被监视属性变化时,回调函数自动调用,进行相关操作
    2.监视的属性必须存在,才能进行监视
    3.监视的两种方法:
        3.1 new Vue时传入watch配置
        3.2 通过vm.$watch监视
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值