挂载钩子中的错误(承诺/异步):“TypeError:无法读取未定义的属性'scrollIntoView'”在挂载钩子(Vue)中

Posted

技术标签:

【中文标题】挂载钩子中的错误(承诺/异步):“TypeError:无法读取未定义的属性\'scrollIntoView\'”在挂载钩子(Vue)中【英文标题】:Error in mounted hook (Promise/async): "TypeError: Cannot read property 'scrollIntoView' of undefined" in mounted hook (Vue)挂载钩子中的错误(承诺/异步):“TypeError:无法读取未定义的属性'scrollIntoView'”在挂载钩子(Vue)中 【发布时间】:2021-03-28 23:22:10 【问题描述】:

ScrollIntoView 返回未定义

导航到该页面时,我试图滚动到元素中:

scrollTo(itemId) 
  this.$refs['item' + itemId].scrollIntoView(
    behavior: 'smooth',
    block: 'center',
    inline: 'nearest',
  )
,

关键是它在挂载的钩子内部被调用。 ref 已定义 itemId 也已定义,它是来自 vue 路由器的查询参数,但它仍然抛出 挂载钩子中的错误(Promise/async):“TypeError: Cannot read property 'scrollIntoView' of undefined”

出了什么问题,如何解决?

【问题讨论】:

如何调用scrollTo 以及如何引用元素? @BoussadjraBrahim 我在 div 中设置: :ref="'item' + item.itemId" 它在生成的循环内。当我调用 scrollTo 时,在挂载的钩子中我设置了参数 this.$route.query.itemId @BoussadjraBrahim 看起来原因是这样的: this.$refs['item' + itemId] 返回 undefined 但是当我 console.log this.$refs 它返回对象 item889 存在。 889 也作为 itemId 传递给方法,为什么它会抛出 undefined? 【参考方案1】:

动态引用似乎还没有在挂载的钩子中准备好,所以尝试观察$route 对象并滚动到所需的元素:

watch:
$route:
    handler(to,from)

         if(to.query.itemId)
           this.scrollTo(to.query.itemId)
         ,
    deep:true //because $route is an object
   



但我认为你应该使用scroll-behavior之类的东西

【讨论】:

似乎没有在手表内部调用 无论如何都不会被调用 尝试在if(...)之前记录tofrom 我认为问题不在于实现方式,而在于如何访问特定的 ref。 this.$refs['item' + itemId] 好像错了 请分享 v-for 循环

以上是关于挂载钩子中的错误(承诺/异步):“TypeError:无法读取未定义的属性'scrollIntoView'”在挂载钩子(Vue)中的主要内容,如果未能解决你的问题,请参考以下文章

挂载钩子中的错误:“TypeError:没有'new'就不能调用类构造函数节点”

挂载钩子中的错误:“错误:AuthUI 实例已存在

挂载钩子中的错误:“TypeError:无法读取未定义的属性 'allStage'”

如何使用带有异步功能的反应钩子“useMemo”?

测试组件 - 挂载钩子中的错误:“TypeError:无法读取未定义的属性 'dispatch'”

挂载钩子中的错误:“错误:FullCalendar 视图“dayGridMonth”不存在。确保您的插件正确加载。”