zoukankan      html  css  js  c++  java
  • vue响应式测试以及注意到在vue中使用定时器(windowAPI)的问题

    测试1.未在data内注册的变量没有响应式,不具备响应式的变量值变化不会触发页面重新渲染

    视图始终是 count:0,a:1;

    <template>
      <div id="welcome">
        <!-- data内注册的变量才会具有响应式 -->
        <div>count:{{count}}</div>
        <div>a:{{a}}</div>
      </div>
    </template>
    
    <script>
    export default {
        data(){
            return {
              count:0
            }
        },
        created(){
        //创建变量a为1,
          this.a=1
        },
        mounted(){
           setTimeout(()=>{
                 this.a=99
                 console.log(this.count); // 0
                 console.log(this.a);     //99
             },1000)
        }
    }
    
    </script>
    

    测试2.在data内注册的变量具有响应式,具备响应式的值变化触发页面重新渲染

    视图由 count:0 ,a:1 变为 count:99,a:99;

    <template>
      <div id="welcome">
        <!-- data内注册的变量才会具有响应式 -->
        <div>count:{{count}}</div>
        <div>a:{{a}}</div>
      </div>
    </template>
    
    <script>
    export default {
        data(){
            return {
              count:0
            }
        },
        created(){
        //创建变量a为1,
          this.a=1
        },
        mounted(){
           setTimeout(()=>{
                 this.a=99
                 this.count=99  
                 console.log(this.count); //99
                 console.log(this.a);     //99
             },1000)
        }
    }
    </script>
    

    控制变量法再次验证

    <template>
      <div id="welcome">
        a:{{a}}
        count:{{count}}
        <button @click="btn1">click1</button>
        <button @click="btn2">click2</button>
      </div>
    </template>
    
    <script>
    export default {
        data(){
            return {
              count:0
            }
        },
        created(){
          this.a=1
        },
        methods:{
            //操作:点击 btn1,
            //结果:a的值变为9,视图未变化未更新
           btn1(){ 
            this.a=9
            console.log(this.a);//9
            }  
             ,
    
        //————————————————————————————————————
            //操作:点击 btn1,后再点击btn2
            //结果:a的值变为9,
            //count的值变为99 ,视图在点击完btn2后变化:a:9,count:99;
           btn2(){ 
            this.count=99
            console.log(this.a); //9
            console.log(this.count); //99
            }   
      }
    }
    </script>
    

    定时器

    这是一个很容易疏忽的问题,在vue中用到this时一定要注意this对象的指向。一般来说,使用window的API时,使用箭头函数会让this指向更保险。

    
    <script>
    export default {
        data(){
            return {
              count:0
            }
        },
        mounted(){
           setTimeout(()=>{
                 console.log(this.count); //99
                 console.log(this);   // VueComponent
             },1000)
    
                setTimeout(function(){
                 console.log(this.count); //undefined
                 console.log(this);  //window
             },1000)
        }
    }
    </script>
    
  • 相关阅读:
    【poj2396】 Budget
    【bzoj3876】 Ahoi2014—支线剧情
    【uoj207】 共价大爷游长沙
    【bzoj3064】 CPU监控
    【codeforces 103E】 Buying Sets
    【bzoj3938】 Robot
    【bzoj1568】 JSOI2008—Blue Mary开公司
    【hdu5306】 Gorgeous Sequence
    【bzoj2229】 Zjoi2011—最小割
    【bzoj2007】 Noi2010—海拔
  • 原文地址:https://www.cnblogs.com/xjt31/p/13985620.html
Copyright © 2011-2022 走看看