mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
204 lines
5.0 KiB
Vue
204 lines
5.0 KiB
Vue
<template>
|
|
<demo-block :title="t('basicUsage')">
|
|
<van-tabs v-model:active="active">
|
|
<van-tab :title="t('tab') + index" v-for="index in tabs" :key="index">
|
|
{{ t('content') }} {{ index }}
|
|
</van-tab>
|
|
</van-tabs>
|
|
</demo-block>
|
|
|
|
<demo-block :title="t('matchByName')">
|
|
<van-tabs v-model:active="activeName">
|
|
<van-tab name="a" :title="t('tab') + 1"> {{ t('content') }} 1 </van-tab>
|
|
<van-tab name="b" :title="t('tab') + 2"> {{ t('content') }} 2 </van-tab>
|
|
<van-tab name="c" :title="t('tab') + 3"> {{ t('content') }} 3 </van-tab>
|
|
</van-tabs>
|
|
</demo-block>
|
|
|
|
<demo-block :title="t('title2')">
|
|
<van-tabs>
|
|
<van-tab v-for="index in 8" :title="t('tab') + index" :key="index">
|
|
{{ t('content') }} {{ index }}
|
|
</van-tab>
|
|
</van-tabs>
|
|
</demo-block>
|
|
|
|
<demo-block :title="t('title3')">
|
|
<van-tabs @disabled="onClickDisabled">
|
|
<van-tab
|
|
v-for="index in 3"
|
|
:title="t('tab') + index"
|
|
:disabled="index === 2"
|
|
:key="index"
|
|
>
|
|
{{ t('content') }} {{ index }}
|
|
</van-tab>
|
|
</van-tabs>
|
|
</demo-block>
|
|
|
|
<demo-block :title="t('title4')">
|
|
<van-tabs type="card">
|
|
<van-tab v-for="index in 3" :title="t('tab') + index" :key="index">
|
|
{{ t('content') }} {{ index }}
|
|
</van-tab>
|
|
</van-tabs>
|
|
</demo-block>
|
|
|
|
<demo-block :title="t('title5')">
|
|
<van-tabs @click="onClick">
|
|
<van-tab v-for="index in 2" :title="t('tab') + index" :key="index">
|
|
{{ t('content') }} {{ index }}
|
|
</van-tab>
|
|
</van-tabs>
|
|
</demo-block>
|
|
|
|
<demo-block :title="t('title6')">
|
|
<van-tabs :active="active" sticky>
|
|
<van-tab :title="t('tab') + index" v-for="index in tabs" :key="index">
|
|
{{ t('content') }} {{ index }}
|
|
</van-tab>
|
|
</van-tabs>
|
|
</demo-block>
|
|
|
|
<demo-block v-if="!isWeapp" :title="t('title7')">
|
|
<van-tabs :active="active">
|
|
<van-tab v-for="index in 2" :key="index">
|
|
<template #title> <van-icon name="more-o" />{{ t('tab') }} </template>
|
|
{{ t('content') }} {{ index }}
|
|
</van-tab>
|
|
</van-tabs>
|
|
</demo-block>
|
|
|
|
<demo-block :title="t('title8')">
|
|
<van-tabs animated>
|
|
<van-tab :title="t('tab') + index" v-for="index in tabs" :key="index">
|
|
{{ t('content') }} {{ index }}
|
|
</van-tab>
|
|
</van-tabs>
|
|
</demo-block>
|
|
|
|
<demo-block :title="t('title9')">
|
|
<van-tabs :active="active" swipeable>
|
|
<van-tab :title="t('tab') + index" v-for="index in tabs" :key="index">
|
|
{{ t('content') }} {{ index }}
|
|
</van-tab>
|
|
</van-tabs>
|
|
</demo-block>
|
|
|
|
<demo-block v-if="!isWeapp" :title="t('title10')">
|
|
<van-tabs scrollspy sticky>
|
|
<van-tab :title="t('tab') + index" v-for="index in 8" :key="index">
|
|
{{ t('content') }} {{ index }}
|
|
</van-tab>
|
|
</van-tabs>
|
|
</demo-block>
|
|
|
|
<demo-block v-if="!isWeapp" :title="t('beforeChange')">
|
|
<van-tabs :before-change="beforeChange">
|
|
<van-tab :title="t('tab') + index" v-for="index in 4" :key="index">
|
|
{{ t('content') }} {{ index }}
|
|
</van-tab>
|
|
</van-tabs>
|
|
</demo-block>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { reactive, toRefs } from 'vue';
|
|
import { useTranslate } from '@demo/use-translate';
|
|
import Toast from '../../toast';
|
|
|
|
const i18n = {
|
|
'zh-CN': {
|
|
tab: '标签 ',
|
|
title2: '标签栏滚动',
|
|
title3: '禁用标签',
|
|
title4: '样式风格',
|
|
title5: '点击事件',
|
|
title6: '粘性布局',
|
|
title7: '自定义标签',
|
|
title8: '切换动画',
|
|
title9: '滑动切换',
|
|
title10: '滚动导航',
|
|
disabled: ' 已被禁用',
|
|
matchByName: '通过名称匹配',
|
|
beforeChange: '异步切换',
|
|
},
|
|
'en-US': {
|
|
tab: 'Tab ',
|
|
content: 'content of tab',
|
|
title2: 'Swipe Tabs',
|
|
title3: 'Disabled Tab',
|
|
title4: 'Card Style',
|
|
title5: 'Click Event',
|
|
title6: 'Sticky',
|
|
title7: 'Custom Tab',
|
|
title8: 'Switch Animation',
|
|
title9: 'Swipeable',
|
|
title10: 'Scrollspy',
|
|
disabled: ' is disabled',
|
|
matchByName: 'Match By Name',
|
|
beforeChange: 'Before Change',
|
|
},
|
|
};
|
|
|
|
export default {
|
|
setup() {
|
|
const t = useTranslate(i18n);
|
|
const state = reactive({
|
|
active: 2,
|
|
activeName: 'b',
|
|
});
|
|
|
|
const tabs = [1, 2, 3, 4];
|
|
|
|
const onClick = (index: number, title: string) => {
|
|
Toast(title);
|
|
};
|
|
|
|
const onClickDisabled = (index: number, title: string) => {
|
|
Toast(title + t('disabled'));
|
|
};
|
|
|
|
const beforeChange = (name: number) => {
|
|
if (name === 1) {
|
|
return false;
|
|
}
|
|
return new Promise((resolve) => {
|
|
resolve(name !== 3);
|
|
});
|
|
};
|
|
|
|
return {
|
|
...toRefs(state),
|
|
t,
|
|
tabs,
|
|
onClick,
|
|
beforeChange,
|
|
onClickDisabled,
|
|
};
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="less">
|
|
@import '../../style/var';
|
|
|
|
.demo-tab {
|
|
margin-bottom: 80vh;
|
|
|
|
.van-tab .van-icon {
|
|
margin-right: 5px;
|
|
vertical-align: -2px;
|
|
}
|
|
|
|
.van-tab__pane {
|
|
padding: 24px 20px;
|
|
background-color: @white;
|
|
}
|
|
|
|
.van-tabs--card .van-tab__pane {
|
|
background-color: transparent;
|
|
}
|
|
}
|
|
</style>
|