vue3 获取dom,

  vue3 获取dom,

  本文主要介绍了在vue3中使用自定义钩子获取dom元素的问题描述,有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。

  

目录

  使用自定义挂钩获取dom元素。分享一下楼主自己的看法。vue获取/操作组件的dom元素。下面是我的代码内容的最后总结(不是全部内容)

  

使用自定义hooks获取dom元素问题

  获取自定义钩子的onMounted事件中的ref元素。当组件调用钩子时,它必须传递一个响应对象。

  

分享下楼主自己的观点

  代码如下所示

  脚本

  //demo.vue

  从“vue”导入{ defineComponent,ref }

  从导入使用条。/useBars

  导出默认定义组件({

  道具:{

  条形:阵列,

  },

  setup() {

  const root ref=ref(null)const {当前页面索引}=use bars(root ref)//这里传递的是一个响应对象。

  const { current pageindex:current pageindex 1 }=use bars(root ref)//这里传递的是空值,而不是对象

  Console.log(“组件设置的最后一段”)

  返回{

  rootRef,

  currentPageIndex,

  }

  },

  })

  /脚本

  //useBar.js

  从“vue”导入{ onMounted }

  导出默认函数useSliders(rootRef) {

  /**

  * 1.传递的对象是响应对象。

  *

  *它是一个响应对象。当调用这个函数时,rootRef.value=nul

  *实例化组件后,组件中的rootRef.value=div/div。

  *执行这个onMounted事件,里面会得到一个div。这个onmounted事件将在组件实例化时执行。

  */

  /**

  *传递它是一个空值。

  * onMounted在执行时自然为null。

  *

  */

  //!感觉是访问同一个地址。如果传递一个responsive对象,然后在组件中给rootRef.value赋值,也可以在这里得到。

  onMounted(()={

  //调试器

  console.log(挂接滑块-,rootRef)

  })

  返回{}

  }```

  

vue获取/操作组件的dom元素

  最近做了一个需要用地图的项目,选择了腾讯地图。创建地图时,我需要将地图容器的id或容器的dom元素传递给地图创建函数。但是在调试过程中发现无法获取dom元素,无法直接通过getElementById获取元素内容。

  

下面是我的代码内容(非全部内容)

  模板

  a型模态

  div id=map/div

  /a-modal

  /模板

  脚本

  从“TMap”导入TMap

  导出默认值{

  方法:{

  open(){

  this.initMap()

  },

  initMap(){

  常数中心=新TMap。锁定(39.984120,116.307484)

  const container=document . getelementbyid( map )

  const map=新t map。地图(容器,{

  中心:中心,

  缩放:11倍

  })

  }

  }

  }

  /脚本

  调试页面的时候一直报错,看不清id的值。我直接打印了容器的值,但是是空的。不过看了其他网上用腾讯地图的例子,基本都是同样的思路。

  然后就开始找问题,一直折腾。最后,我想是不是因为我把map容器放在了a-modal组件中。然后通过对比网上的代码,我发现别人的直接放在模板里或者用其他html元素包装,而我把map容器放在a-modal组件里。

  这时我就想,是不是可以通过a-modal组件获取dom元素,然后给a-modal组件添加ref属性?代码如下所示

  a-modal ref=modal

  div id=map/div

  /a-modal

  然后打印这个。$refs.modal,观察打印的对象,看能不能找到dom元素内容,认为容器元素是用a-modal包装的,相当于用了slots,于是我找到了$slots.default属性,在上面找到了渲染的VNode,最后找到了div#map元素。

  既然已经找到了,就把这个元素传递给地图创建函数。照你说的做,马上改代码。

  模板

  a-modal ref=modal

  div id=map/div

  /a-modal

  /模板

  脚本

  从“TMap”导入TMap

  导出默认值{

  方法:{

  open(){

  this.initMap()

  },

  initMap(){

  常数中心=新TMap。锁定(39.984120,116.307484)

  const容器=this。$refs.modal.$slots.default[0]

  const map=新t map。地图(容器,{

  中心:中心,

  缩放:11倍

  })

  }

  }

  }

  /脚本

  如果Tip:Vue中的槽没有名字,默认就是default,所以default[0]是默认槽的第一个元素,也就是我的div#map。好了,开始调试。

  但是,还有一个问题。地图有时候出来了也不出来。是因为div元素还没有渲染吗?在这种情况下,使用vue的$nextTick,并修改open函数:

  open(){

  这个。$nextTick(()={

  this.initMap()

  })

  },

  果然一下子就没问题了,随时都能正常渲染地图内容。

  

最后总结

  在vue中获取/操作页面的dom元素。如果元素和模板之间有html标签,可以通过document的get element方法直接获取元素。但是,如果它们之间有自定义组件,则必须通过组件的$slots获取dom元素。如果有一个已命名的插槽,您应该根据插槽名称找到相应插槽下的元素。

  以上个人经历,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: