• vue3中通过ref获取子组件实例,取值为undefined


    也就是Vue3如何通过 ref 获取子组件实例(子组件中的DOM结构、数据、及方法),今天写index.vue(父组件)时想获取子组件的数据和方法,通过给子组件绑定ref,打印子组件的数据为undefined;百度搜索常用方法为:

    参考连接:Vue3---通过 ref 获取子组件实例(子组件中的DOM结构、数据、及方法),vue3中ref的妙用,vue中获取调用子组件方法,vue中使用子组件数据_vue3 获取组件ref_imkaifan的博客-CSDN博客代码如下:

    子组件

    1. <template>
    2. <div class="hello">
    3. <h1>{{ msg }}h1>
    4. <input type="file" id="fileInput" name="file" multiple="multiple" @change="selectFile"/>
    5. div>
    6. template>
    7. <script>
    8. import { defineComponent, ref } from 'vue'
    9. export default defineComponent({
    10. name: 'HelloWorld',
    11. setup() {
    12. const msg = ref('HelloWorld') // 响应式数据:msg
    13. const fileList = ref([]) // 响应式数据:上传的文件列表
    14. function selectFile () { // 有文件上传时
    15. var file = document.getElementById('fileInput').files[0] // File(Blob) 对象 File extends Blob
    16. fileList.value.push(file)
    17. }
    18. return { // return中的数据会被父组件拿到
    19. msg,
    20. fileList,
    21. selectFile
    22. }
    23. }
    24. })
    25. script>

    父组件

    1. <template>
    2. <div class="home">
    3. <HelloWorld ref="sonRef" />
    4. <button @click="getSonComponent">GetSonComponentbutton>
    5. div>
    6. template>
    7. <script>
    8. import { defineComponent, ref } from 'vue'
    9. import HelloWorld from '@/components/HelloWorld.vue'
    10. export default defineComponent({
    11. name: 'Home',
    12. components: {
    13. HelloWorld
    14. },
    15. setup(){
    16. const sonRef = ref(null) // 通过 ref 绑定子组件
    17. function getSonComponent () { // 通过 ref 获取子组件\
    18. // 获取子组件的数据
    19. console.log(sonRef.value)
    20. console.log(sonRef.value.msg)
    21. sonRef.value.fileList.forEach(item => {
    22. console.log(item)
    23. })
    24. }
    25. return {
    26. sonRef,
    27. getSonComponent
    28. }
    29. }
    30. })
    31. script>

    而我通过ref获取组件实例的数据打印为undefined的代码为:

    父组件

    1. <template>
    2. <div>
    3. <welcome>welcome>
    4. div>
    5. template>
    6. <script setup lang="ts">
    7. import welcome from './welcome.vue'
    8. import { ref,onMounted } from 'vue'
    9. const welcomeRef = ref(null);
    10. console.log("welcomeRef ",welcomeRef.value.isScroll) //welcomeRef undefined