vue之$nextTick

  • vue中的dom更新是异步的,参考下面的例子:
<template>
  <div>
    <div
      style="width: 20vw; height: 10vw; border: 1px solid #000000"
      @click="updateData"
      ref="box"
    >
      {{ msg }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      msg: "我是msg",
    };
  },
  methods: {
    updateData() {
      this.msg = "msg改变了";
      console.log(this.$refs.box.innerHTML);
    },
  },
};
</script>

输出 我是msg

  • 如果想要视图更新之后立刻获取更新后的dom元素,可以使用$nextTick
<template>
  <div>
    <div
      style="width: 20vw; height: 10vw; border: 1px solid #000000"
      @click="updateData"
      ref="box"
    >
      {{ msg }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      msg: "我是msg",
    };
  },
  methods: {
    updateData() {
      this.msg = "msg改变了";
      this.$nextTick(() => {
        console.log(this.$refs.box.innerHTML);
      })
    },
  },
};
</script>

输出 msg改变了

  • 使用场景
    在created生命周期里对DOM进行操作的时候,因为DOM还未渲染,所以对DOM的操作包在\(nextTick中,等DOM一渲染就立刻执行操作 总结就是: 如果在视图更新后你想在新视图的基础上做些什么的时候,你就需要用到\)nextTick了
posted @ 2021-02-23 14:26  zoo-x  阅读(50)  评论(0编辑  收藏  举报