关于Vue的api中的this.$nextTick()

参数:

{Function} [callback]

用法:

将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。它跟全局方法 Vue.nextTick 一样,不同的是回调的 this 自动绑定到调用它的实例上。

//第一个例子
<template>
  <div>
    <div ref="hello">
      <h1>{{value}}</h1>
    </div>
    <button @click="get">点击</button>
  </div>
</template>

<script>
export default {
  data(){
    return{
      value:'hello,world!'
    }
  },
  methods:{
    get(){
    //   this.value = '你好'
    //   console.log(this.$refs['hello'].innerHTML);
    //   this.$nextTick(()=>{
    //     console.log(this.$refs['hello'].innerHTML)
    //   })
    }
  },
  mounted(){
    console.log('mounted');
    console.log(this.$refs['hello'])
    this.$nextTick(()=>{
      console.log('Dom改变了mounted')
      console.log(this.$refs['hello'])
    })
  },
  created(){
    console.log('create');
    console.log(this.$refs['hello'])
    this.$nextTick(()=>{
      console.log('Dom改变了created')
      console.log(this.$refs['hello'])
    })
  }
  
}
</script>

在这里插入图片描述
从打印的顺序可以看到,在create钩子函数执行DOM时,还未进行渲染,此时对Dom操作无用;而在create钩子函数里面使用this.$nextTick(),可以等待dom生成之后调用。

//第二个例子
<template>
  <div>
    <div ref="hello">
      <h1>{{value}}</h1>
    </div>
    <button @click="get">点击</button>
  </div>
</template>

<script>
export default {
  data(){
    return{
      value:'hello,world!'
    }
  },
  methods:{
    get(){
      this.value = '你好'
      console.log(this.$refs['hello'].innerHTML);
      this.$nextTick(()=>{
        console.log(this.$refs['hello'].innerHTML)
      })
    }
  }
}
</script>

在这里插入图片描述
点击之后
在这里插入图片描述
根据上面的例子可以看出,在方法里直接打印的话, 由于dom元素还没有更新, 因此打印出来的还是未改变之前的值,而通过this.$nextTick()获取到的值为dom更新之后的值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值