TabWrapper.vue
:
<template>
<div class="tab">
<ul class="d-flex list-unstyled gap-1">
<li v-for="item in titles" :key="item">
<a class="d-block px-3 py-1 border" @click.prevent="selectedTitle = item" href="#">{{ item }}</a>
</li>
</ul>
<slot />
</div>
</template>
<script setup lang="ts">
const slots = defineSlots()
const titles = ref(slots.default().map((t: { props: { title: string; }; }) => t.props.title))
const selectedTitle = ref(titles.value[0])
provide('selectedTitle', selectedTitle)
</script>
Tab.vue
:
<template>
<div class="tab-content" v-show="props.title == selectedTitle">
<slot />
</div>
</template>
<script setup>
const props = defineProps(['title'])
const selectedTitle = inject('selectedTitle')
</script>
app.vue
:
<TabWrapper>
<Tab title="tab1">111 Lorem ipsum dolor sit amet.</Tab>
<Tab title="tab2">222 Lorem ipsum dolor sit amet.</Tab>
<Tab title="tab3">333 Lorem ipsum dolor sit amet.</Tab>
<Tab title="tab4">444 Lorem ipsum dolor sit amet.</Tab>
</TabWrapper>
source-over: 預設值,新的放在舊的上面source-atop: 新的在舊的上面,然後會把新的身上沒有跟舊的重疊的部分變不見source-in: 新的在舊的上面,然後只留下重疊的部分,其他都變不見(有點像打洞機打下去後得到的那個要丟掉的圓形)source-out: 新的在舊的上面,然後會把舊的部分+重疊的部分都拿掉,只留下沒重疊到的新的內容(有點像裁切的概念)destination-over: 新的在舊的下面destination-atop: 新的在舊的下面,然後會把舊的身上沒有跟新的重疊的部分變不見destination-in: 新的在舊的下面,然後只留下重疊的部分,其他都變不見(有點像打洞機打下去後得到的那個要丟掉的圓形)destination-out: 新的在舊的下面,然後會把新的部分+重疊的部分都拿掉,只留下沒重疊到的舊的內容(有點像裁切的概念)lighter: 新的在舊的上面,重疊部分高亮copy: 直接把舊的變不見,只留下新的xor: 新的在舊的上面,重疊的部分變不見(有點像打洞機打下去後得到的那張有洞的紙)
Oct 31, 2024// 提示:修改為有意義且可閱讀的變數名稱let cartProducts = [{id: 1,productName: "Orange",price: 2,quantity: 1}];
Oct 30, 2024假設我們從後端獲取到一篇部落格的 html 要渲染到畫面上但裡面有很多連結,且有些是連到網站其他分頁點擊連結後會發現 Network 發送了許多不必要的請求,將網站整個 reload 了
Apr 4, 2024進入Flutter 官方網站,點擊右上角『Get started』
Jan 26, 2024or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up