有同学在看 Vue 官方文档时,对 API 文档中的 Vue.nextTick 和 vm.$nextTick 的作用不太理解。
其实如果看一下深入响应式原理 - vue.js中的有关内容,可能会有所理解,不过有些同学可能看到这个标题之后就选择跳过了,因此这里简述如下:
Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。nextTick是在下次DOM更新循环结束之后执行延迟回调,在修改数据之后使用 n e x t T i c k 是 在 下 次 D O M 更 新 循 环 结 束 之 后 执 行 延 迟 回 调 , 在 修 改 数 据 之 后 使 用 nextTick,则可以在回调中获取更新后的 DOM,API 文档中官方示例如下:
-
new Vue({
-
// …
-
methods: {
-
// …
-
example: function () {
-
// modify data
-
this.message = ‘changed’
-
// DOM is not updated yet
-
this.$nextTick(function () {
-
// DOM is now updated
-
// `this` is bound to the current instance
-
this.doSomethingElse()
-
})
-
}
-
}
-
})
有些同学可能不大理解什么叫 DOM is now updated,在深入响应式原理
- vue.js中的示例情况也比较罕见,Vue 模板中直接在根无素中进行插值,然后在实例方法中使用了 this.$el.textContent 来获得更新之后的 DOM。
为了更好地理解这一点,修改示例如下:
模板——
所有评论(0)