uniapp vue3 父组件通过ref调用子组件方法

事先说明

  1. 使用的是 vue3 的 setup 语法糖
  2. 仅在 H5 和微信小程序测试过,其他端没试过但应该差不多
  3. 环境如下
    1. HBuildx v3.96
    2. 微信开发者工具 v1.06.2308310
    3. 谷歌浏览器 v119.0.6045.124
    4. Microsoft Edge版本v119.0.2151.44 (正式版本) (64 位)

直接上实例

父组件 index.vue

<template>
    <text>父组件内容 = {{ count }} </text>
    <button type="default" @click="add">+1</button>
    <test ref="myTest" />
</template>

<script lang="ts" setup>
import { ref } from 'vue';
import Test from './Test.vue';    // 引入子组件

const count = ref<number>(0);

// const myTest= ref(null); // 此处填入null或者不填都行,至少我这边试了留空也行
const myTest= ref();

const add = () => {
    count.value += 1;
    // 此处调用子组件的方法
    myTest.value.add2(1);    // 此处是vue3的ref切记要 .value 
    // vue2是 this.$refs.myTest.add2(1);
    // 转变为vue3 则是 myTest.value.add2(1);
};

</script>

子组件  Test.vue

<template>
    <view class="box">
        <view class="btn">
            <button type="default" @click="add2(1)">+1</button>
            <text>子组件:{{ count }}</text>
            <button type="default" @click="add2(-1)">-1</button>
        </view>
    </view>
</template>

<script setup lang="ts">
import { ref } from 'vue';

const count = ref<number>(0);

const add2 = (num: number) => {
    count.value += num;
};

// 重点:此处一点要对外暴露 不然外部无法使用,当做是js的module的export即可
defineExpose({ add2 });
</script>

<!-- 简单样式可有可无  不是重点-->
<style scoped lang="scss">
.box {
    width: 90vw;
    padding: 20rpx;
    margin: 20rpx auto;
    background-color: #efefef;
    border: 1rpx solid gray;
    .btn {
        display: flex;
    }
}
</style>

补充说明

  • 这是我重构项目时遇到的一个点,vue2升vue3,但是项目中使用了很多的ref
  • 关于是否原创,那肯定不可能是原创的,但是投稿只有【原创、转载、翻译】这三项,【转载、翻译】怎么感觉都不是,因为是自己写的所以就默认【原创】投稿了。反正都是直接百度或者看官方文档的,相同的内容肯定csdn都有,但是内容杂乱。
  • 我发博客只是为了记录,现在感觉开始忘记东西了,为了往后回首还能看到自己花时间的东西,姑且记录下

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3和uniapp中,要实现组件调用组件方法,可以使用ref属性和$refs。在组件上添加属性ref和属性名(可以任意指定),然后在组件中使用this.$refs.(属性名).(组件方法)来调用组件方法。例如,组件模板如下所示: ```html <template> <view class=""> <son ref="mySon"></son> <button @click="fatherClick">组件按钮</button> </view> </template> ``` 组件的脚本部分可以这样写: ```javascript import son from '@/components/son.vue' export default { components: { son }, methods: { fatherClick() { this.$refs.mySon.sonClick("father call son"); } } } ``` 其中,son是组件的引入路径,fatherClick是组件方法,通过this.$refs.mySon来访问组件方法sonClick。 而组件的模板可以这样写: ```html <template> <view class=""> <text>组件</text> </view> </template> ``` 组件的脚本部分可以这样写: ```javascript export default { name: 'son', methods: { sonClick(e) { console.log(e) } } } ``` 这样,在组件中点击按钮时,就会调用组件的sonClick方法,并输出"father call son"到控制台。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [UNI-APP_使用vue3组件通讯,组件调用组件方法等](https://blog.csdn.net/weixin_44599931/article/details/128951814)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [uniapp组件调用组件方法](https://blog.csdn.net/weixin_49175501/article/details/117334781)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值