1.0父传子
1.1父组件传值
<template>
<div class="container">
<Head title="我不知道怎么说" :arr="[1,2,3]"></Head>
<Foot></Foot>
<Content></Content>
</div>
</template>
<script setup lang='ts'>
import { reactive, ref } from 'vue'
import Head from './components/head.vue'
import Foot from './components/footer.vue'
import Content from './components/content.vue'
1.2子组件接收
<template>
<div class="container">
头部:{{ title }}
<ul>
<li v-for="item in arr">2</li>
</ul>
</div>
</template>
<script setup lang="ts">
import { reactive, ref } from "vue";
type arrs = number | string
withDefaults(
defineProps<{
title: string;
arr: arrs[];
}>(),
{
arr:()=>['2',2]
}
);
</script>
2.0子传父
2.1子组件
<template>
<div class="container">
<h1>子组件</h1>
<button @click="send">给父组件传值</button>
</div>
</template>
<script setup lang="ts">
import { reactive, ref } from "vue";
const emit = defineEmits(["on-click"]);
interface My {
name:string
age:number
}
const emit = defineEmits<{
(e:'on-click',my:My):void
}>()
const send = () => {
let my = {
name: "何",
age: 20,
};
emit("on-click", my);
};
</script>
2.2父接收
<template>
<div class="container">
<Head @on-click="getMy"></Head>
</div>
</template>
<script setup lang='ts'>
import { reactive, ref } from 'vue'
import Head from './components/head.vue'
interface My {
name:string
age:number
}
const getMy = (myInfo:My) => {
console.log(myInfo);
}
</script>
3.0 通过defineExpose子组件暴露自身方法和数据
3.1子组件
<template>
<div class="container">
<h1>子组件</h1>
</div>
</template>
<script setup lang="ts">
import { reactive, ref } from "vue";
defineExpose({
name:'何',
open:() => console.log(222)
})
</script>
3.2父组件接收
<template>
<div class="container">
<!-- 给组件绑定ref -->
<Head ref="theName"></Head>
<button @click="receive">get</button>
</div>
</template>
<script setup lang="ts">
import { reactive, ref } from "vue";
import Head from "./components/head.vue";
const theName = ref<InstanceType<typeof Head>>();
const receive = () => {
console.log(theName.value?.name);
theName.value?.open()
};
</script>