Vue $nextTick() 方法
示例
在我们获取 <p>
标签内的消息之前,使用 $nextTick()
方法等待 DOM 更新。
methods: {
updateMsg() {
this.message = '"Hello! This is a new message."';
this.results.push(this.$refs.pEl.textContent);
this.$nextTick(() => {
this.results.push(this.$refs.pEl.textContent + ' (using $nextTick())');
});
}
}
运行示例 »
请参阅下面的更多示例。
定义和用法
$nextTick()
方法在执行之前等待 DOM 更新。
我们使用 this.$nextTick()
来等待当前 Vue 组件的 DOM 更新周期完成。
参数 | 描述 |
---|---|
callback function | 可选。 提供的回调函数将在 DOM 更新后运行(参见上面的示例)。 $nextTick() 方法也可以在不带参数的情况下使用(请参阅下面的示例)。 |
除了 this.$nextTick()
之外,还有一个全局 nextTick()
方法,可用于等待 DOM 更新,甚至可以从特定组件的范围之外进行更新 。
注意:在 Vue 中,当响应式变量发生更改时,DOM 不会立即更新。 相反,Vue 会保存这些更改,并在"下一次更新"发生时应用它们。 这是为了增强性能并确保 Vue 实例和 DOM 之间的一致性。
更多示例
示例
通过在异步方法中调用带有 await
前缀的 $nextTick()
方法,可以获得与第一个示例相同的结果。 这会导致下一行代码被搁置,直到"下一次更新"发生。
<template>
<h2>Example $nextTick() Method</h2>
<p>Using "await $nextTick()", the next lines of code will also wait until the 'next tick' happens.
</p>
<div>
<p ref="messageEl">{{ message }}</p>
<button v-on:click.once="updateMsg">Update Message</button>
<ol>
<li v-for="x in results">{{ x }}</li>
</ol>
</div>
</template>
<script>
export default {
data() {
return {
message: "Initial Message",
results: []
};
},
methods: {
async updateMsg() {
this.message = "Hello! This message is now updated.";
this.results.push(this.$refs.messageEl.textContent);
await this.$nextTick();
this.results.push(this.$refs.messageEl.textContent + ' (after await $nextTick())');
}
}
};
</script>
<style scoped>
div {
border: solid black 1px;
padding: 10px;
}
</style>
运行示例 »
相关页面
JavaScript 教程:JavaScript 异步
Vue 教程:Vue 方法
Vue 教程:Vue 模板参考
Vue 教程:Vue v-on
Vue 教程:Vue 事件修饰符
Vue 参考:Vue 'ref' 属性
Vue 参考:Vue $refs 对象