ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

vue3 - defineExpose的使用(父组件调用子组件方法vue3 <script setup>版)

2022-06-20 09:04:43  阅读:242  来源: 互联网

标签:调用 defineExpose 方法 clear vue3 组件 ref refs


在使用单文件组件<script setup>创建一个子组件时,可能遇到父组件需要调用子组件的方法,或者访问子组件的变量,在使用vue2或仅<script>标签中只需要子组件上写一个ref='xxx'变量,父组件通过this.$refs['xxx']就可以直接访问子组件的方法或变量。实现如下:

如子组件有一个方法clear(),vue2或非setup用法时,非<script setup>的父组件是这么调用的:

<template>
    <div>
        <子组件 ref="childRef" />
        <button @click="childHandle" />
    </div>
</template>

<script>
    data(){
        return {}
    },
    methods:{
        childHandle(){
            this.$refs['childHandle'].clear()
        }
    }
</script>

这里子组件里只要声明了的变量,父组件就可以直接访问到。但是子组件是<script setup>时,父组件直接调用就会提示clear方法未定义。官网有这么一句话:使用 <script setup> 的组件是默认关闭的,也即通过模板 ref 或者 $parent 链获取到的组件的公开实例,不会暴露任何在 <script setup> 中声明的绑定。因此,父组件是不能直接访问子组件的方法。需要子组件手动的抛出才行。

子组件中需要如此修改:

<script setup>
    import { defineExpose, ref } from 'vue';
    const data = ref('');
    
    function clear(){
        data.value = ''
    }
    defineExpose({ clear })
</script setup>

如此一来,非<script setup>父组件就能直接通过this.$refs['xxx']调用子组件的方法了,如果父组件也是<script setup>的话,只要用vue3的方法取到这个子组件的ref同理调用。

标签:调用,defineExpose,方法,clear,vue3,组件,ref,refs
来源: https://www.cnblogs.com/codexlx/p/16392074.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有