Rumah > Soal Jawab > teks badan
P粉8659009942023-08-31 00:54:26
Reka bentuk komponen kad anda tidak kelihatan bermakna bagi saya. Saya cadangkan anda pertimbangkan semula.
Ini ialah slot render taman permainan yang ringkas
const { createApp, h } = Vue;
const Card = {
setup(props, { attrs, slots, emit, expose }) {
return () => [
h('label', 'Card'),
h('div', 'Slots:'),
h('div', {}, slots.default()),
h('div', {}, slots.header()),
h('div', {}, slots.body()),
h('div', {}, slots.footer())
]
}
}
const App = {
components: { Card },
data() {
return {
}
}
}
const app = createApp(App)
app.mount('#app')
#app { line-height: 2; }
[v-cloak] { display: none; }
label { font-weight: bold; }
<div id="app">
<card>
<template #default>
Default
<card-header>
<title level="3">Header</title>
</card-header>
</template>
<template #header>
Header
</template>
<template #body>
Body
</template>
<template #footer>
Footer
</template>
</card>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
Sila ambil perhatian amaran. Vue tidak akan memaparkan card-header
di sini kerana ia tidak dapat menghuraikannya.
[Vue warn]: Failed to resolve component: card-header If this is a native custom elemen
Jika anda boleh mengakses data, mengapa lulus slots
操作card-body
/card-footer
项目直接通过bodyCount
?
Jika ia kelihatan tidak munasabah pada saya.
const { createApp, h } = Vue;
const CardHeader = {
template: '<div class="card-header">card-header: <slot></slot></div>'
}
const CardBody = {
template: '<div class="card-body">card-body: <slot></slot></div>'
}
const CardFooter = {
template: '<div class="card-footer">card-footer: <slot></slot></div>'
}
const Card = {
components: {
CardHeader, CardBody, CardFooter
},
setup(props, { attrs, slots, emit, expose }) {
//console.log(slots.default())
return () => [
h('label', 'Card'),
h('div', 'Slots:'),
h('div', {}, slots.default()),
]
}
}
const App = {
components: { Card, CardHeader, CardBody, CardFooter },
data() {
return {
bodyCount: ['a','b'],
footerCount: ['a','b']
}
}
}
const app = createApp(App)
app.mount('#app')
#app { line-height: 2; }
[v-cloak] { display: none; }
label { font-weight: bold; }
.card-header, .card-body, .card-footer {
border: 1px solid #F0F0F0;
}
<div id="app">
<card>
<template #default>
<card-header>
<div level="3">Header</div>
</card-header>
bodyCount: {{bodyCount.length}}
<card-body
v-for="b in bodyCount"
:key="'b' + b">
Body {{ b }}
</card-body>
footerCount: {{footerCount.length}}
<card-footer
v-for="f in footerCount"
:key="'f' + f">
<text>Footer {{ f }}</text>
</card-footer>
</template>
</card>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
P粉4404536892023-08-31 00:37:50
Ternyata - serpihan boleh dikembangkan melalui sifat Kanak-kanak pada setiap elemen tatasusunan. Jadi dalam kes ini, v-for menghasilkan nod v, yang merupakan serpihan, tetapi kita boleh membuat kesimpulan lebih lanjut dengan melihat sifat Kanak-kanak.