javascript - 如何访问在 v-if 中条件渲染的 ref 元素 - Vue

标签 javascript vue.js

如果用户登录,我有一个使用 v-if="isLogged" 有条件渲染的元素:

<div
  v-if="isLogged"
  class="chatBlock"
  ref="chat"
></div>

我正在尝试在 mounted () 函数中获取 chat 引用的滚动高度 - this.$refs.logged.scrollHeight,但这是不可能的,因为如果用户没有登录,那么这个 div 不会在安装阶段渲染,所以即使用户登录 - 它也不会工作,因为安装阶段已经过去了。

是否可以使用 watch 方法跟踪 DOM 中的元素外观?

更新

添加了观察者,正如 Steven 在下面的 mounted () 中建议的那样:

this.$store.watch(
  (state) => {
    return this.$store.getters.isLogged
  },
  (newValue, oldValue) => {
    if (newValue) {
      this.chatHeight = this.$refs.chat.scrollHeight
    }
  }
)

最佳答案

接受的答案对我不起作用。 watch 不保证元素已经渲染。

为了确保该元素可用,我必须使用 $nextTick

 if (newValue) {   
     this.$nextTick(function () {
         this.chatHeight = this.$refs.chat.scrollHeight
    })
}

这将导致代码在下一个 DOM 更新周期之后执行。

关于javascript - 如何访问在 v-if 中条件渲染的 ref 元素 - Vue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53578419/

相关文章:

javascript - 不能将类作为函数调用

javascript - 使用 JavaScript 更改跨度的值

javascript - 需要使用 Vue 获取点击元素 'Name'

javascript - 如何在 VueJS Mixin 中返回值

javascript - 打印警报框以响应 yii2 中的 ajax 调用

javascript - 如何将自定义工具提示添加到 angular-nvd3 多条形图?

javascript - 内部指令与主指令的通信 - 调用函数

javascript - 在 javascript 中重新执行脚本而不再次调用服务器

javascript - 在 Vue.Js + GitHub API (octokat.js) 中与 fetch() 作斗争

javascript - 更新slot vuejs中的数据