美文网首页
Vue - vue.nextTick()

Vue - vue.nextTick()

作者: ElricTang | 来源:发表于2019-11-04 08:44 被阅读0次

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

一. 意义:

  • 修改数据后,并不是马上就渲染到DOM上面的,vue还需要进行一系列的操作(通知watcher更新等等)。
  • vue.nextTick()保证了回调在数据更新好后执行。
  • 我们不知道什么时候完成这些操作,vue.nextTick()出现后也就不用管什么时候完成,只需要把完成后要干的事作为回调传入vue.nextTick()就行。

二. 使用方法:

1. 传入回调

// 修改数据
vm.msg = 'Hello'
// DOM 还没有更新
Vue.nextTick(function () {
  // DOM 更新了
})

2. 作为一个 Promise 使用 (2.1.0 起新增 )

// 修改数据
vm.msg = 'Hello'
Vue.nextTick()
  .then(function () {
    // DOM 更新了
  })

三. 使用场景:

1. 在生命周期钩子函数created()中使用

  • 因为created阶段DOM尚未渲染,无法执行DOM操作。使用vue.nextTick()将回调延迟到DOM渲染完成后自动执行。
    <body>
        <div id='app'>
            <span ref="msg"></span>
        </div>
        <script>
            var vm=new Vue({
                el:'#app',
                data:{
                },
                created(){
                    this.$nextTick(()=>{
                        this.$refs.msg.innerText = 'hello world';
                    })      
                }
            })
        </script>
    </body>

2. 更新数据后想获取新内容

  • 更新后直接获取DOM
    <body>
        <div id='app'>
            <span id='target'>{{msg}}</span>
            <button @click="change">change value</button>
        </div>
        <script>
            var vm=new Vue({
                el:'#app',
                data:{
                    msg:'hello world'
                },
                methods:{
                    change(){
                        this.msg = 'value has been changed';
                        let target = document.getElementById('target');
                        console.log(target.innerText);
                    }
                }
            })
        </script>
    </body>
  • 更新后在nextTick()回调中获取DOM
methods:{
  change(){
    this.msg = 'value has been changed';
       this.$nextTick(()=>{
          let target = document.getElementById('target');
          console.log(target.innerText);
       })
    }
}

3. 确保子组件加载完成

  • mounted阶段不会承诺所有的子组件也都一起被挂载。使用vue.nextTick()进行子组件相关操作。

相关文章

  • VUE api等

    全局 api Vue.nextTick Vue.set( target, propertyName/index, ...

  • vue使用this.$nextTick()函数

    Vue.nextTick Vue 中的 nextTick 涉及到 Vue 中 DOM 的异步更新 Vue 实现响应...

  • vue中的this.$nextTick和Vue.nextTick

    首先 this.$nextTick 其实就是Vue.nextTick, 因为this指向的就是Vue 总结: 页...

  • vue.nextTick()和this.$nextTick()获

    一.对vue.nextTick()和this.$nextTick()细致介绍 虽然vue是不建议操作dom的,...

  • $nextTick 的作用

    有同学在看 Vue 官方文档时,对 API 文档中的 Vue.nextTick 和 vm.$nextTick 的作...

  • Vue - vue.nextTick()

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

  • Vue.nextTick

    场景:页面加载时需要让文本框获取焦点 用法:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这...

  • Vue中的nextTick

    为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用Vue.nextTick(callb...

  • 关于vue常见的题目

    1. 简述vue响应式原理 2. 计算属性的原理 3. Vue.nextTick 原理 用法: 理解:nextTi...

  • vue使用this.$nextTick()函数

    Vue.nextTick 可能看很多理念,不会特别懂,不用担心,先就记住这句话就行 " 数据被更新了,Vue.ne...

网友评论

      本文标题:Vue - vue.nextTick()

      本文链接:https://www.haomeiwen.com/subject/cxqlbctx.html