vue3中插槽传到组件内部的,怎么才能获取到ref

发布于 2022-09-12 23:50:34 字数 458 浏览 19 评论 0

问题描述

我尝试做一个popover组件,大致参考element ui 使用插槽做,但是发现插槽传过去的没法获取到ref。

相关代码

调用
image.png
组件里:
image.png

组件data:
image.png

尝试的方法

拿不到... slots返回的是一个虚拟节点 尝试手动挂载无果...
image.png

...提问三十分钟后自行曲线救国解决了 但仍想知道答案。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夜无邪 2022-09-19 23:50:34

父组件的ref只能通过父组件获取,父组件获取自己的实例传到子组件
父组件
import {getCurrentInstance} from 'vue'
let instance=getCurrentInstance()
<child :ins="instance">
<input ref="input"/>
</child>
子组件
setup(prop,ctx){
prop.ins.refs.ins//这就是slot传过来的input的ref
}

千纸鹤 2022-09-19 23:50:34

试一下

console.log(this.$slots)

如果多个插槽

// 排序空格其他内容
this.slotChildren = []
for (let i = 0; i< this.$slots.default.length; i++) {
  if (that.$slots.default[i].elm.nodeType !== 3) {
    that.slotChildren.push(that.$slots.default[i]) // 获得那些插入的内容
  }
}
黑凤梨 2022-09-19 23:50:34

vue3中,我也遇到这样的封装组件问题,想知道最后你的解决方案是哪一个!

留一抹残留的笑 2022-09-19 23:50:34

我也有遇到这种场景, 是用<component :is="$slots.default()[0]"></component>这样实现的,但是要用作用域插槽就gg了...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文