父组件与子组件通讯
父组件App.vue
<template> <div> <p>{{ money }}</p> <button @click="updateUserInfo">修改</button> </div> <clildd ref="c1" /> <clildd2 ref="c2" /> </template> <script setup lang="ts"> import { ref } from 'vue' import clildd from '@/components/Child.vue' import clildd2 from '@/components/Child2.vue' let c1 = ref() let c2 = ref() function updateUserInfo() { c1.value.cName = '罗分明' c1.value.test('调用子组件的方法') c2.value.cName = '罗分明个人博客' } //获取所有子组件对外的数据, 方法调用 function getAllChild(refs: any) { console.log(refs); for (let key in refs) { refs[key].cName += '_已修改' } } let money = ref(10000) //把数据交给外部 参数可以是 字段属性 也可以是方法 defineExpose({ money, pTest }) function pTest(msg: string) { console.log(msg) } </script> <style scoped></style>
子组件1 /components/Child.vue
<template> <div class="child"> <p> {{ cName }} </p> <button @click="updateP($parent)">修改父组件方法</button> </div> </template> <script setup lang="ts" > import { ref } from 'vue'; let cName = ref('LuoFenMing'); function test(msg: string) { console.log(msg) } //把数据交给外部 参数可以是 字段属性 也可以是方法 defineExpose({ cName, test }) function updateP(parent: any) { parent.money += 10 parent.pTest('调用父组件方法') } </script> <style> .child { border: 1px red solid; } </style>
子组件2 /components/Child2.vue
<template> <div class="child2"> <p> {{ cName }} </p> </div> </template> <script setup lang="ts" > import { ref } from 'vue'; let cName = ref('www.luofenming.com'); //把数据交给外部 参数可以是 字段属性 也可以是方法 defineExpose({ cName }) </script> <style> .child2 { border: 1px blue solid; } </style>
本文来自 www.luofenming.com