先看下代码示例:
<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,费解。。。
杨__羊羊
忽然笑
随时随地看视频慕课网APP
相关分类