docs(Tabs): use composition api

This commit is contained in:
chenjiahan 2020-12-13 19:06:46 +08:00
parent 6ca5a63d34
commit 714f0f0d1a
3 changed files with 125 additions and 85 deletions

View File

@ -26,11 +26,12 @@ The first tab is actived by default, you can set `v-model:active` to active spec
``` ```
```js ```js
import { ref } from 'vue';
export default { export default {
data() { setup() {
return { const active = ref(2);
active: 2, return { active };
};
}, },
}; };
``` ```
@ -46,11 +47,12 @@ export default {
``` ```
```js ```js
import { ref } from 'vue';
export default { export default {
data() { setup() {
return { const activeName = ref('a');
activeName: 'a', return { activeName };
};
}, },
}; };
``` ```
@ -83,10 +85,14 @@ You can set `disabled` attribute on the corresponding `van-tab`.
import { Toast } from 'vant'; import { Toast } from 'vant';
export default { export default {
methods: { setup() {
onClickDisabled(name, title) { const onClickDisabled = (name, title) => {
Toast(title + ' is disabled'); Toast(name + ' is disabled');
}, };
return {
onClickDisabled,
};
}, },
}; };
``` ```
@ -117,10 +123,14 @@ Tabs styled as cards.
import { Toast } from 'vant'; import { Toast } from 'vant';
export default { export default {
methods: { setup() {
onClick(name, title) { const onClick = (name, title) => {
Toast(title); Toast(title);
}, };
return {
onClick,
};
}, },
}; };
``` ```
@ -198,8 +208,8 @@ In scrollspy mode, the list of content will be tiled.
```js ```js
export default { export default {
methods: { setup() {
beforeChange(index) { const beforeChange = (index) => {
// prevent change // prevent change
if (index === 1) { if (index === 1) {
return false; return false;
@ -209,7 +219,11 @@ export default {
return new Promise((resolve) => { return new Promise((resolve) => {
resolve(index !== 3); resolve(index !== 3);
}); });
}, };
return {
beforeChange,
};
}, },
}; };
``` ```

View File

@ -27,11 +27,12 @@ app.use(Tabs);
``` ```
```js ```js
import { ref } from 'vue';
export default { export default {
data() { setup() {
return { const active = ref(2);
active: 2, return { active };
};
}, },
}; };
``` ```
@ -49,11 +50,12 @@ export default {
``` ```
```js ```js
import { ref } from 'vue';
export default { export default {
data() { setup() {
return { const activeName = ref('a');
activeName: 'a', return { activeName };
};
}, },
}; };
``` ```
@ -86,10 +88,14 @@ export default {
import { Toast } from 'vant'; import { Toast } from 'vant';
export default { export default {
methods: { setup() {
onClickDisabled(name, title) { const onClickDisabled = (name, title) => {
Toast(name + '已被禁用'); Toast(name + '已被禁用');
}, };
return {
onClickDisabled,
};
}, },
}; };
``` ```
@ -121,10 +127,14 @@ export default {
import { Toast } from 'vant'; import { Toast } from 'vant';
export default { export default {
methods: { setup() {
onClick(name, title) { const onClick = (name, title) => {
Toast(title); Toast(title);
}, };
return {
onClick,
};
}, },
}; };
``` ```
@ -204,8 +214,8 @@ export default {
```js ```js
export default { export default {
methods: { setup() {
beforeChange(index) { const beforeChange = (index) => {
// 返回 false 表示阻止此次切换 // 返回 false 表示阻止此次切换
if (index === 1) { if (index === 1) {
return false; return false;
@ -216,7 +226,11 @@ export default {
// 在 resolve 函数中返回 true 或 false // 在 resolve 函数中返回 true 或 false
resolve(index !== 3); resolve(index !== 3);
}); });
}, };
return {
beforeChange,
};
}, },
}; };
``` ```

View File

@ -102,68 +102,80 @@
</demo-block> </demo-block>
</template> </template>
<script> <script lang="ts">
export default { import { reactive, toRefs } from 'vue';
i18n: { import { useTranslate } from '@demo/use-translate';
'zh-CN': { import Toast from '../../toast';
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',
},
},
data() { const i18n = {
return { '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, active: 2,
activeName: 'b', activeName: 'b',
tabs: [1, 2, 3, 4], });
const tabs = [1, 2, 3, 4];
const onClick = (index: number, title: string) => {
Toast(title);
}; };
},
methods: { const onClickDisabled = (index: number, title: string) => {
onClickDisabled(index, title) { Toast(title + t('disabled'));
this.$toast(title + this.t('disabled')); };
},
onClick(index, title) { const beforeChange = (name: number) => {
this.$toast(title);
},
beforeChange(name) {
if (name === 1) { if (name === 1) {
return false; return false;
} }
return new Promise((resolve) => { return new Promise((resolve) => {
resolve(name !== 3); resolve(name !== 3);
}); });
}, };
return {
...toRefs(state),
t,
tabs,
onClick,
beforeChange,
onClickDisabled,
};
}, },
}; };
</script> </script>