• Vue nextTick用法


    VUE nextTick用法

    在vue中,观察到数据改变后,会开启一个队列。Vue会把同一个事件循环当中观察到的数据变化的 watcher 推送进这个队列。如果这个watcher被触发多次,只会被推送到队列一次。在下一个事件循环时,Vue会清空队列并进行必要的DOM更新。

    DOM是异步更新的,所以当你需要改变数据后对DOM进行操作,或者在created 生命周期对DOM进行操作,是需要等到DOM更新完成后再操作的。此时就可以哟个 nextTick 方法解决问题。

    使用情景

    • created 生命周期对DOM操作:

    • 当修改数据完成时,想基于最新DOM进行操作:

      例如:

      打开编辑模态框之前,先查询详情渲染更新到表单,等表单更新完毕需要立即设置表单验证。

      ajax 获取数渲染到DOM中展示出来后对DOM进行操作。(也可在 mounted 直接可以操作DOM,因为created 周期 DOM还未挂载,mounted 周期时DOM挂载渲染完成)

    全局 nextTick

    Vue.nextTick([callback, context])

    参数:

    {Function}[callback]:回调函数

    {Object}[context]:

    用法:

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

    // 修改数据
    vm.msg = 'Hello'
    // DOM 还没有更新
    Vue.nextTick(function () {
      // DOM 更新了
    })
    
    // 作为一个 Promise 使用 (2.1.0 起新增,详见接下来的提示)
    Vue.nextTick()
      .then(function () {
        // DOM 更新了
      })
    

    vm.$nextTick

    vm.$nextTick([callback])

    参数:

    {Function}[callback]: 回调函数

    用法:

    将回调延迟到下次DOM更新循环之后执行。

    在修改数据之后立即使用,然后等待DOM更新,更新完毕后会调用回调函数。

    若没有提供回调函数且在支持 Promise 的环境中,会返回一个 Promise对象

    new Vue({
        // ...
        methods: {
            //...
            test(){
                // 修改数据
                this.msg = 'new value' + new Date().getTime()
                // DOM 还未更新
                this.$nextTick(function(){
                    // DOM 更新完成
                    // `this` 绑定到当前实例
                    this.doSomethingElse()
                    
                })
                
            },
            test2(){
                // 修改数据
                this.msg = 'new value' + new Date().getTime()
                // DOM 还未更新
                this.$nextTick().then(function(){
                    // DOM 更新完成
                    // `this` 绑定到当前实例
                    this.doSomethingElse()
                })
            },
            // this.$nextTick() 返回 Promise 对象,
            // 就可以用 es2017 的语法 async/await 实现相同的功能
            async test3(){
                // 修改数据
                this.msg = 'new value' + new Date().getTime()
                // DOM 还未更新
                await this.$nextTick()
                // 已更新
                this.doSomethingElse()
            }
        }
    })
    
  • 相关阅读:
    Select loop
    shell学习
    硬链接与软连接的区别_(转)
    Windows 远程桌面连接Ubuntu16.04图像界面
    C# mysql 连接Apache Doris
    Hadoop 2.7.3 分布式集群安装
    ubuntu 16.04安装Chrome离线crx插件包
    RPC框架之Thrift分析(转)
    ubuntu 16.04安装ibus中文输入法
    secureCRT下linux rz命令上传文件失败或变小(破损)的问题解决方法
  • 原文地址:https://www.cnblogs.com/ting-hui/p/15015168.html
Copyright © 2020-2023  润新知