feat: 第三方组件二次封装slot传递
parent
3f3366fde4
commit
7abfedfa1c
@ -0,0 +1,25 @@
|
||||
<template>
|
||||
<thirdComp
|
||||
headerText="我是header"
|
||||
footerText="我是footer"
|
||||
@doClick="handleClick"
|
||||
>
|
||||
<template v-slot:header>
|
||||
<div>我是header传入的slot</div>
|
||||
</template>
|
||||
<template v-slot>
|
||||
<div>我是main传入的slot</div>
|
||||
</template>
|
||||
<template v-slot:footer>
|
||||
<div>我是footer传入的slot</div>
|
||||
</template>
|
||||
</thirdComp>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import thirdComp from './thirdComp.vue';
|
||||
|
||||
const handleClick = () => {
|
||||
console.log('传递事件');
|
||||
};
|
||||
</script>
|
||||
@ -0,0 +1,10 @@
|
||||
<template>
|
||||
<div class="text-center">我是二次封装组件加工处</div>
|
||||
<!-- 这里是整个二次封装的精髓 -->
|
||||
<component :is="h(thirdComp, $attrs, $slots)"></component>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { h } from 'vue';
|
||||
import thirdComp from './thirdComp.vue';
|
||||
</script>
|
||||
@ -0,0 +1,21 @@
|
||||
<template>
|
||||
<div class="flex flex-col text-center">
|
||||
<header class="mb-5">
|
||||
<span>{{ headerText }}</span>
|
||||
<slot name="header"></slot>
|
||||
</header>
|
||||
<main class="mb-5">
|
||||
<slot></slot>
|
||||
</main>
|
||||
<footer class="mb-5">
|
||||
<span>{{ footerText }}</span>
|
||||
<slot name="footer"></slot>
|
||||
</footer>
|
||||
<el-button @click="$emit('doClick')">点击执行</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
const props = defineProps(['headerText', 'footerText']);
|
||||
const emit = defineEmits(['doClick']);
|
||||
</script>
|
||||
@ -0,0 +1,34 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card header="基础引用方法">
|
||||
<MyComp></MyComp>
|
||||
</el-card>
|
||||
<br />
|
||||
<el-card header="二次封装方法">
|
||||
<myCompWrap
|
||||
headerText="我是header"
|
||||
footerText="我是footer"
|
||||
@doClick="handleClick"
|
||||
>
|
||||
<template v-slot:header>
|
||||
<div>我是header传入的slot</div>
|
||||
</template>
|
||||
<template v-slot>
|
||||
<div>我是main传入的slot</div>
|
||||
</template>
|
||||
<template v-slot:footer>
|
||||
<div>我是footer传入的slot</div>
|
||||
</template>
|
||||
</myCompWrap>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import MyComp from './components/myComp.vue';
|
||||
import myCompWrap from './components/myCompWrap.vue';
|
||||
|
||||
const handleClick = () => {
|
||||
console.log('二次封装传递事件');
|
||||
};
|
||||
</script>
|
||||
Loading…
Reference in New Issue