Vue - vue.nextTick()

2019-11-04  本文已影响0人  ElricTang

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

一. 意义:

二. 使用方法:

1. 传入回调

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

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

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

三. 使用场景:

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

    <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. 更新数据后想获取新内容

    <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>
methods:{
  change(){
    this.msg = 'value has been changed';
       this.$nextTick(()=>{
          let target = document.getElementById('target');
          console.log(target.innerText);
       })
    }
}

3. 确保子组件加载完成

上一篇下一篇

猜你喜欢

热点阅读