• Vue中的updated和$nextTick


    $nextTick用法:将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。

    updated用法:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。

    this.$nextTick()可以用作局部的数据更新后DOM更新结束后的操作,全局的可以用updated生命周期函数

    在vue中操作DOM--this.$nextTick()

    异步更新队列

    可能你还没有注意到,Vue 在更新 DOM 时是异步执行的。只要侦听到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更。
    (也就是说数据变化后,DOM不会马上更新,根据数据更新DOM的事件被放入异步队列中了)
    如果同一个 watcher 被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作是非常重要的。然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去重的) 工作。

    例如,当你设置 vm.someData = 'new value',该组件不会立即重新渲染。当刷新队列时,组件会在下一个事件循环“tick”中更新。多数情况我们不需要关心这个过程,但是如果你想基于更新后的 DOM 状态来做点什么,这就可能会有些棘手。虽然 Vue.js 通常鼓励开发人员使用“数据驱动”的方式思考,避免直接接触 DOM,但是有时我们必须要这么做。为了在数据变化之后等待 Vue 完成更新 DOM,可以在数据变化之后立即使用 Vue.nextTick(callback)。这样回调函数将在 DOM 更新完成后被调用。
    (在这个更新DOM的队列结束后,就会调用nextTick,从而执行里面的callback)

    例如:

    Vue.component('example', {
      template: '<span>{{ message }}</span>',
      data: function () {
        return {
          message: '未更新'
        }
      },
      methods: {
        updateMessage: function () {
          this.message = '已更新'
          console.log(this.$el.textContent) // => '未更新'
          this.$nextTick(function () {
            console.log(this.$el.textContent) // => '已更新'
          })
        }
      }
    })
    

    遇到过的问题:当使用异步调用到的资源来修改data的内容时(比如数据更改后新增了一个dom)
    this.$nextTick () {修改这个新增dom里面的内容}要放在修改data的代码的后面,不然可能callback中对于dom的修改不生效。

  • 相关阅读:
    #pragam预处理分析
    #error和line
    Appium+Robotframework实现Android应用的自动化测试-4:AppiumLibrary介绍和安装
    Appium+Robotframework实现Android应用的自动化测试-3:一个必不可少的工具介绍
    Appium+Robotframework实现Android应用的自动化测试-2:Windows中启动Appium和模拟器
    python程序打包成.exe----pyinstaller工具
    python: extend (扩展) 与 append (追加) 的差别
    2小时入门Robot Framework
    sizeof进行结构体大小的判断
    Python 包管理工具解惑
  • 原文地址:https://www.cnblogs.com/HelloJC/p/11189853.html
Copyright © 2020-2023  润新知