两个例子教你弄懂VUE中的$nextTick

18 篇文章 0 订阅

我们知道VUE是异步更新队列,详情见官网http://doc.vue-js.com/v2/guide/reactivity.html

通过官网,我们也可以知道$nextTick是在DOM渲染之后执行的方法,初次接触可能有点蒙,哥呢,就是懒,利用菜鸟编译器就动手了。这上面的东西也是非常好,来个连接:https://www.runoob.com/vue2/vue-watch.html

下面来两个实例助你理解并可以写这部分代码:  

<!DOCTYPE html>

 <html>

     <head>

         <title>Test</title>

     </head>

     <body>

        <script src="https://unpkg.com/vue/dist/vue.js"></script>

          <div class="app">

           <div ref="msgDiv">{{msg}}</div>

           <div v-if="msg1">在$nextTick之前渲染: {{msg1}}</div>

           <div v-if="msg2">$nextTick渲染: {{msg2}}</div>

          <div v-if="msg3">在$nextTick之后渲染: {{msg3}}</div>

           <button @click="changeMsg">

            点击触发

           </button>

        </div>

        <script type="text/javascript">

            new Vue({

               el: '.app',

              data: {

                 msg: 'Hello Vue.',

                msg1: '',

                msg2: '',

                msg3: ''

              },

              methods: {

                changeMsg() {

                  this.msg = "Hello world."

alert("1")

                  this.msg1 = this.$refs.msgDiv.innerHTML

alert("2")

                  this.$nextTick(() => {//证明它是最后运行的

                    this.msg2 = this.$refs.msgDiv.innerHTML

  alert("3")

                   })

                   this.msg3 = this.$refs.msgDiv.innerHTML

alert("4")

                 }

               }

             })

         </script>

     </body>

 </html>

 

 

 

 

 

上面这个例子是通过按钮绑定的事件,其执行顺序是$nextTick最后执行,结果也是DOM

渲染之后的结果。到这理解了,但是还写不了代码,那在看下面这个例子。

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>

<script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>

</head>

   <body>

      <div id = "computed_props">

         千米 : <input type = "text" v-model = "kilometers">

         米 : <input type = "text" v-model = "meters">

      </div>

   <p id="info"></p>

      <script type = "text/javascript">

         var vm = new Vue({

            el: '#computed_props',

            data: {

               kilometers : 0,

               meters:0

            },

            methods: {

            },

            computed :{

            },

            watch : {

               kilometers:function(val) {

                  this.kilometers = val;

                  this.meters = this.kilometers * 1000;

  this.$nextTick(() => {

                    this.meters = this.kilometers * 0;//很调皮,让这个值一直为0

                   })

               },

               meters : function (val) {

                  this.kilometers = val/ 1000;

                  this.meters = val;

               }

            }

         });

         // $watch 是一个实例方法

vm.$watch('kilometers', function (newValue, oldValue) {

// 这个回调将在 vm.kilometers 改变后调用

    document.getElementById ("info").innerHTML = "修改前值为: " + oldValue + ",修改后值为: " + newValue;

})

      </script>

   </body>

</html>

 

 

由于每次DOM渲染完都要执行 

this.$nextTick(() => {

this.meters = this.kilometers * 0;//很调皮,让这个值一直为0

})

所以总是框总是为0,删了就回复了。

相信运行了这两个实例后就可以下手写代码了。哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值