首先 this.$nextTick 其實就是Vue.nextTick, 因為this指向的就是Vue
官方說法: 在下次 DOM 更新循環(huán)結束之后執(zhí)行延遲回調涯竟。在修改數(shù)據(jù)之后立即使用這個方法赡鲜,獲取更新后的 DOM。(似乎有點云里霧里)
普及一下異步執(zhí)行的運行機制如下:
(1)所有同步任務都在主線程上執(zhí)行庐船,形成一個執(zhí)行棧(execution context stack)银酬。
(2)主線程之外,還存在一個"任務隊列"(task queue)筐钟。只要異步任務有了運行結果揩瞪,就在"任務隊列"之中放置一個事件。
(3)一旦"執(zhí)行棧"中的所有同步任務執(zhí)行完畢盗棵,系統(tǒng)就會讀取"任務隊列"壮韭,看看里面有哪些事件。那些對應的異步任務纹因,于是結束等待狀態(tài)喷屋,進入執(zhí)行棧,開始執(zhí)行瞭恰。
(4)主線程不斷重復上面的第三步屯曹。
// 實例上掛載一個message數(shù)據(jù)
vm.message = 'changed'
// 想要立即使用更新后的DOM。這樣不行惊畏,因為設置message后DOM還沒有更新
console.log(vm.$el.textContent) // 并不會得到'changed'
//這樣可以恶耽,nextTick里面的代碼會在DOM更新后執(zhí)行
Vue.nextTick(function(){
console.log(vm.$el.textContent) //可以得到'changed'
})
總結: 頁面渲染是異步的,想要第一時間獲取更新后真實的DOM,可以使用nextStick!