当前位置: 首页 > 知识库问答 >
问题:

前端 - vue3.js通过ref的方式获取子元素失败?

魏襦宗
2023-12-29

vue3.js通过ref的方式获取子元素失败

Html

<test ref="testdata"></test>

js:

<script setup lang="ts">  import test from './test.vue'    const testdata = ref(null); onMounted(() => {  console.log(testdata.value,'testdata') })</script>

打印出来为null

共有3个答案

楚流觞
2023-12-29

在Vue3中,如果使用setup方法来写的话,在父组件中是无法直接通过ref来获取到子组件的实例对象的,也就意味着你再像Vue2那样去获取.

在Vue3中如果想要获取到子组件的方法或属性,需要主动向外暴露,下面写一个简单的例子
parent.vue

<template><test ref="tt"></text></template><script setup>import {ref, onmounted} from "vue";const tt = ref(null);onmounted(() => {    //要获取子组件中的myFun方法    console.log(tt.value.myFun)})</script>

子组件text.vue

<script setup>import { defineExpose } from "vue";function myFun() {  console.log("object");}let name = ref("bigNeck");// 要想父组件可以访问到子组件内的方法,需要主动暴露,使用的是defineExpose方法defineExpose({  myFun,  name,});</script>

以上就可以了,也就是说你想要获取子组件哪个方法或属性,都需要主动手动暴露。这也符合Vue3的开发思想,就是按需加载。

吕鸿轩
2023-12-29

如果我没理解错,你的test.vue是一个子组件,你确定子组件被成功渲染出来了吗?

尹超
2023-12-29

你遇到的问题是在 Vue 3 中使用 ref 获取子组件实例失败。这个问题的原因是你在 setup 函数中使用了 ref,但是你并没有将 ref 绑定到任何 DOM 元素或子组件实例上。

在 Vue 3 中,ref 是用于创建响应式引用的,它需要绑定到一个变量上。在你的代码中,你创建了一个名为 testdata 的 ref,但没有将它绑定到任何东西上。

为了解决这个问题,你需要将 ref 绑定到你想要获取的 DOM 元素或子组件实例上。在你的代码中,你可以将 ref 绑定到你的自定义组件 test 上。

以下是修改后的代码示例:

<template>  <test ref="testdata"></test></template><script setup lang="ts">import { ref, onMounted } from 'vue';import test from './test.vue';const testdata = ref(null);onMounted(() => {  console.log(testdata.value, 'testdata');});</script>

这样,你就可以通过 testdata.value 访问到你的子组件实例了。

 类似资料:
  • html 页面通过cdn引入vue,通过ref获取元素高度失败?这种方式可以通过$refs获取吗? 这里打印出来都是undefined,应该怎么改?

  • 为什么我不可以通过ref获取盒子的dom(vue3)

  • 本文向大家介绍js通过classname来获取元素的方法,包括了js通过classname来获取元素的方法的使用技巧和注意事项,需要的朋友参考一下 原生JS有3种方式来获取元素: 实现原理很简单,通过getElementsByTagName获取到一个元素集合,如果传入了tagname这个参数就根据传入的 tagname来获取,否则获取所有的元素,然后再一个一个元素来匹配classname是否相等.

  • 嗨,我一直在到处寻找一个非常简单的解释,如何通过xPath找到一个元素。 我想要的只是一种简单的方法来寻找一个元素,但是我想要找到的所有帮助都需要一个。这对我不管用。以下是我想做的: 加载URL 这是我的代码: 当我执行 我得到未定义时,我做 有没有更简单的方法来获取元素?也许是。。。。

  • 我有一个非常简单的问题,我有一个div在一个html页面,我可以通过他的XPath访问这是:。 我想要一个XPath,可以提供这个div的所有子元素,但我找不到它。我需要用硒的findElements方法获取元素,但我测试的方法不起作用: 我的超文本标记语言代码如下: 我想这样使用XPath: 我的Java Selenium脚本如下: 我应该使用什么XPath来获取的子级? 编辑1:我确实使用了*

  • 无限级菜单 点击每项隐藏或显示每项的后代子菜单 这是另一个vue文件 以下是我实现的方法