Доступ к компонентам vue, переданным через слот Vue 3

#vue.js #vue-component #vuejs3 #vue-slot

Вопрос:

Описание проблемы

Я пытаюсь получить доступ к дочерним компонентам Vue, переданным в слот.

Я делаю это со следующим подходом: this.$slots.default()

Я получаю компоненты и даже могу обращаться к методам компонента и вызывать их, используя следующий подход: this.$slots.default()[1].type.methods.methodName

Проблема в том, что в дочернем компоненте this ключевое слово теперь изменилось на другой тип, где вы можете получить доступ только к методам, определенным в этом компоненте, и к ограниченным переменным. И поэтому, например, вы не можете получить доступ к этому.$refs (который мне действительно нужен) или к этому.$el или к чему-либо еще, кроме определенных методов и некоторых переменных.

Что я пробовал

Я попытался назначить this.$refs переменной в функции onmount, а затем попытаться получить к ней доступ при вызове метода из родительского компонента, но вы не можете получить доступ к этой переменной.

В Vue2 у вас есть полный доступ к дочернему компоненту, и это будет работать.

Есть ли способ исправить это в Vue3?

Комментарии:

1. Пожалуйста, покажите весь пример и объясните, чего вы хотите достичь. Это похоже на проблему XY. «методы доступа и вызова компонента с использованием следующего подхода» — это выглядит как плохой дизайн и никогда не должно делаться при нормальных обстоятельствах.

2. Я не думаю, что это возможно в Vue3, поскольку VNodes не зависят от контекста. Видишь github.com/vuejs/vue-next/issues/2 .