小言_互联网的博客

用$nextTick解决vue中ref等属性失效的问题

461人阅读  评论(0)

       vue项目中组件的初始化以及数据填充、更新都是需要一定的时间的,而且这些更新是异步进行的,UI渲染线程和JS主线程并不是同一个线程,所以在开发的时候极有可能遇到的情况是,引用子组件后,子组件显示出来了但是父组件的ref属性并没有找到子组件,这就要用到vue中的$nextTick方法来解决。

先看看官方对这个方法的说明如下:

Vue.nextTick( [callback, context] )

  • 参数

    • {Function} [callback]
    • {Object} [context]
  • 用法

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

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

    2.1.0 起新增:如果没有提供回调且在支持 Promise 的环境中,则返回一个 Promise。请注意 Vue 不自带 Promise 的 polyfill,所以如果你的目标浏览器不原生支持 Promise (IE:你们都看我干嘛),你得自己提供 polyfill。

    综上就是说:如果你想在组件更新之后执行操作的话,最好是把这些操作放在$nextTick方法里面执行,否则会出现怪异的组件属性丢失或者方法找不到的情况。


转载:https://blog.csdn.net/playboyanta123/article/details/105702436
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场