先看下代碼示例:<template>
<div ref="box">{{content}}</div></template><script>export default {
data() { return { content: 'before'
}
},
mounted() { this.nextTick(() => { console.log(this.$refs.box.innerHTML) // after
}) this.content = 'after'
this.nextTick(() => { console.log(this.$refs.box.innerHTML) // after
})
}
}</script>這兩天又重新看了下 Vue 的源碼,nextTick(cb)會把cb push到callbacks中,而 this.content = 'after'也會把依賴content的watcher的執行函數flushSchedulerQueue push到callbacks中,接下來在同步代碼執行完畢后一并flushCallbacks。這樣說的話例子中第一個console.log(this.$refs.box.innerHTML)執行的時候content并未更新啊,為什么輸出after呢?更新一下,我通過script標簽引入Vue的話,則輸出是before和after,但如果通過webpack構建運行的話,則輸出都是after,費解。。。
添加回答
舉報
0/150
提交
取消