Skip to content

this.$refs 打印 undefined 问题

问题

近期在项目中遇到问题,需要获取 form 表单中的一个富文本,然后给这个富文本赋值显示。

因为需要表单内做到选项切换,内容显示不同,所以使用 v-if 进行判断包裹。

但是我在 created 生命周期内 获取不到该元素,console 出来结果为 undefined

官方解释

vue 官网中 ref 下有一段话 "关于 ref 注册时间的重要说明:因为 ref 本身是作为渲染结果被创建的,在初始渲染的时候你不能访问它们 - 它们还不存在!$refs 也不是响应式的,因此你不应该试图用它在模板中做数据绑定。"

意思就是说,你只能等到页面加载完闭之后才能通过 this.$refs 来拿到该元素,如果你使用 v-if、v-for 渲染页面的话,你就只能等到页面加载完闭之后才能拿到。

解决方法

  1. 元素在 created , mounted 阶段无法拿到,但是 update 阶段就可以获取到该元素,此时就可以使用 this.$refs 获取元素了
  2. 可以通过 this.$nextTick(() => {}) 等页面渲染好之后再调用。

Released under the MIT License.