• vue nextTick得用法


    官网介绍:

    Vue.nextTick( [callback, context] )

    在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

    (是不是不懂官网在说啥,写个例子看看)

    <template>
      <div class="hello">
        <h1 ref='h1'>{{ msg }}</h1>
         <h2>{{msg1}}</h2>
        <h3>{{msg2}}</h3>
        <h4>{{msg3}}</h4>
        <div @click="changeMsg">点击修改</div>
      </div>
    </template>
    
    <script>
    export default {
      name: 'HelloWorld',
      data () {
        return {
          msg: '旧内容',
          msg1:'',
          msg2:'',
          msg3:''
        }
      },
      methods:{
        changeMsg(){
          this.msg='新内容';
          this.msg1=this.$refs.h1.innerHTML
          this.$nextTick(()=>{
            this.msg2=this.$refs.h1.innerHTML
          })
          // 获取dom元素得内容 在data更新之前发生 所以导致了获取到没修改得旧内容
          this.msg3=this.$refs.h1.innerHTML
        }
      }
    }
    </script>
    View Code

    结果

        = 》 

    结果:msg1和msg3显示的内容是旧内容,而msg,msg2显示的内容是新内容。

    由于 获取dom元素得内容 在data更新之前发生 所以导致了获取到没修改得旧内容

     Vue中DOM更新是异步的

    nextTick使用场景:

    1.vue生命周期:created()中,由于此处dom得挂载还没完成,渲染也没有完成,data观测完成,想要获取dom的内容 或者操作dom 需要用nextTick

    2.在数据改变之后,需要执行某些dom的结构,内容上的操作的时候,用nextTick可以确保活取到数据改变以后的dom,数据

     Vue中DOM异步更新和nextTick的关系:

    Vue异步执行DOM更新过程:数据变化,Vue将开启一个队列,将所有数据的变化都存储起来,到一定时间后,再统一更新。如果同一数据多次变化,呗watcher多次检测到,只会存储一次,最后那次的变化,在下一次更新渲染dom的事件循环“tick”中,执行操作。

    异步执行操作:基于原生Promise.then和MessageChannel,若环境不支持(IE)则采用setTimeout来延迟执行。



    参考博客地址 https://www.jianshu.com/p/a7550c0e164f

  • 相关阅读:
    《数据结构》树与二叉树
    C/C++ 一点笔记(1)
    c#中隐藏基类方法的作用
    VS2010 灵活运用快捷操作功能(新手必看)
    C# 之类复制 MemberwiseClone与Clone(深 浅 Clone)
    DLL笔记
    批处理文件
    .NET Remoting(一)
    MSI安装数据库
    关于用户角色权限的一点想法(RBAC)
  • 原文地址:https://www.cnblogs.com/GoTing/p/13440406.html
Copyright © 2020-2023  润新知