mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-08-11 06:59:46 +08:00
docs(DropdownMenu): use composition api
This commit is contained in:
parent
540ffb6a4c
commit
0ef23a3477
@ -17,27 +17,35 @@ app.use(DropdownItem);
|
|||||||
|
|
||||||
```html
|
```html
|
||||||
<van-dropdown-menu>
|
<van-dropdown-menu>
|
||||||
<van-dropdown-item v-model="value1" :options="option1" />
|
<van-dropdown-item v-model="state.value1" :options="option1" />
|
||||||
<van-dropdown-item v-model="value2" :options="option2" />
|
<van-dropdown-item v-model="state.value2" :options="option2" />
|
||||||
</van-dropdown-menu>
|
</van-dropdown-menu>
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
import { reactive } from 'vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
setup() {
|
||||||
return {
|
const state = reactive({
|
||||||
value1: 0,
|
value1: 0,
|
||||||
value2: 'a',
|
value2: 'a',
|
||||||
option1: [
|
});
|
||||||
{ text: 'Option1', value: 0 },
|
const option1 = [
|
||||||
{ text: 'Option2', value: 1 },
|
{ text: 'Option1', value: 0 },
|
||||||
{ text: 'Option3', value: 2 },
|
{ text: 'Option2', value: 1 },
|
||||||
],
|
{ text: 'Option3', value: 2 },
|
||||||
option2: [
|
];
|
||||||
{ text: 'Option A', value: 'a' },
|
const option2 = [
|
||||||
{ text: 'Option B', value: 'b' },
|
{ text: 'Option A', value: 'a' },
|
||||||
{ text: 'Option C', value: 'c' },
|
{ text: 'Option B', value: 'b' },
|
||||||
],
|
{ text: 'Option C', value: 'c' },
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
state,
|
||||||
|
option1,
|
||||||
|
option2,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -47,16 +55,16 @@ export default {
|
|||||||
|
|
||||||
```html
|
```html
|
||||||
<van-dropdown-menu>
|
<van-dropdown-menu>
|
||||||
<van-dropdown-item v-model="value" :options="option" />
|
<van-dropdown-item v-model="state.value" :options="option" />
|
||||||
<van-dropdown-item title="Title" ref="item">
|
<van-dropdown-item title="Title" ref="item">
|
||||||
<van-cell center title="Title">
|
<van-cell center title="Title">
|
||||||
<template #right-icon>
|
<template #right-icon>
|
||||||
<van-switch v-model="switch1" size="24" active-color="#ee0a24" />
|
<van-switch v-model="state.switch1" size="24" active-color="#ee0a24" />
|
||||||
</template>
|
</template>
|
||||||
</van-cell>
|
</van-cell>
|
||||||
<van-cell center title="Title">
|
<van-cell center title="Title">
|
||||||
<template #right-icon>
|
<template #right-icon>
|
||||||
<van-switch v-model="switch2" size="24" active-color="#ee0a24" />
|
<van-switch v-model="state.switch2" size="24" active-color="#ee0a24" />
|
||||||
</template>
|
</template>
|
||||||
</van-cell>
|
</van-cell>
|
||||||
<div style="padding: 5px 16px;">
|
<div style="padding: 5px 16px;">
|
||||||
@ -69,23 +77,31 @@ export default {
|
|||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
import { ref, reactive } from 'vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
setup() {
|
||||||
return {
|
const item = ref(null);
|
||||||
|
const state = reactive({
|
||||||
value: 0,
|
value: 0,
|
||||||
switch1: false,
|
switch1: false,
|
||||||
switch2: false,
|
switch2: false,
|
||||||
option: [
|
});
|
||||||
{ text: 'Option1', value: 0 },
|
const options = [
|
||||||
{ text: 'Option2', value: 1 },
|
{ text: 'Option1', value: 0 },
|
||||||
{ text: 'Option3', value: 2 },
|
{ text: 'Option2', value: 1 },
|
||||||
],
|
{ text: 'Option3', value: 2 },
|
||||||
|
];
|
||||||
|
const onConfirm = () => {
|
||||||
|
item.value.toggle();
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
item,
|
||||||
|
state,
|
||||||
|
option,
|
||||||
|
onConfirm,
|
||||||
};
|
};
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
onConfirm() {
|
|
||||||
this.$refs.item.toggle();
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
@ -21,27 +21,35 @@ app.use(DropdownItem);
|
|||||||
|
|
||||||
```html
|
```html
|
||||||
<van-dropdown-menu>
|
<van-dropdown-menu>
|
||||||
<van-dropdown-item v-model="value1" :options="option1" />
|
<van-dropdown-item v-model="state.value1" :options="option1" />
|
||||||
<van-dropdown-item v-model="value2" :options="option2" />
|
<van-dropdown-item v-model="state.value2" :options="option2" />
|
||||||
</van-dropdown-menu>
|
</van-dropdown-menu>
|
||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
import { reactive } from 'vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
setup() {
|
||||||
return {
|
const state = reactive({
|
||||||
value1: 0,
|
value1: 0,
|
||||||
value2: 'a',
|
value2: 'a',
|
||||||
option1: [
|
});
|
||||||
{ text: '全部商品', value: 0 },
|
const option1 = [
|
||||||
{ text: '新款商品', value: 1 },
|
{ text: '全部商品', value: 0 },
|
||||||
{ text: '活动商品', value: 2 },
|
{ text: '新款商品', value: 1 },
|
||||||
],
|
{ text: '活动商品', value: 2 },
|
||||||
option2: [
|
];
|
||||||
{ text: '默认排序', value: 'a' },
|
const option2 = [
|
||||||
{ text: '好评排序', value: 'b' },
|
{ text: '默认排序', value: 'a' },
|
||||||
{ text: '销量排序', value: 'c' },
|
{ text: '好评排序', value: 'b' },
|
||||||
],
|
{ text: '销量排序', value: 'c' },
|
||||||
|
];
|
||||||
|
|
||||||
|
return {
|
||||||
|
state,
|
||||||
|
option1,
|
||||||
|
option2,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -75,23 +83,31 @@ export default {
|
|||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
import { ref, reactive } from 'vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
setup() {
|
||||||
return {
|
const item = ref(null);
|
||||||
|
const state = reactive({
|
||||||
value: 0,
|
value: 0,
|
||||||
switch1: false,
|
switch1: false,
|
||||||
switch2: false,
|
switch2: false,
|
||||||
option: [
|
});
|
||||||
{ text: '全部商品', value: 0 },
|
const options = [
|
||||||
{ text: '新款商品', value: 1 },
|
{ text: '全部商品', value: 0 },
|
||||||
{ text: '活动商品', value: 2 },
|
{ text: '新款商品', value: 1 },
|
||||||
],
|
{ text: '活动商品', value: 2 },
|
||||||
|
];
|
||||||
|
const onConfirm = () => {
|
||||||
|
item.value.toggle();
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
item,
|
||||||
|
state,
|
||||||
|
option,
|
||||||
|
onConfirm,
|
||||||
};
|
};
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
onConfirm() {
|
|
||||||
this.$refs.item.toggle();
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
@ -58,74 +58,79 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import { computed, reactive, ref, toRefs } from 'vue';
|
||||||
|
import { useTranslate } from '@demo/use-translate';
|
||||||
import { RED } from '../../utils/constant';
|
import { RED } from '../../utils/constant';
|
||||||
|
|
||||||
export default {
|
const i18n = {
|
||||||
i18n: {
|
'zh-CN': {
|
||||||
'zh-CN': {
|
disableMenu: '禁用菜单',
|
||||||
disableMenu: '禁用菜单',
|
switchTitle1: '包邮',
|
||||||
switchTitle1: '包邮',
|
switchTitle2: '团购',
|
||||||
switchTitle2: '团购',
|
itemTitle: '筛选',
|
||||||
itemTitle: '筛选',
|
expandDirection: '向上展开',
|
||||||
expandDirection: '向上展开',
|
customContent: '自定义菜单内容',
|
||||||
customContent: '自定义菜单内容',
|
customActiveColor: '自定义选中态颜色',
|
||||||
customActiveColor: '自定义选中态颜色',
|
option1: [
|
||||||
option1: [
|
{ text: '全部商品', value: 0 },
|
||||||
{ text: '全部商品', value: 0 },
|
{ text: '新款商品', value: 1 },
|
||||||
{ text: '新款商品', value: 1 },
|
{ text: '活动商品', value: 2 },
|
||||||
{ text: '活动商品', value: 2 },
|
],
|
||||||
],
|
option2: [
|
||||||
option2: [
|
{ text: '默认排序', value: 'a' },
|
||||||
{ text: '默认排序', value: 'a' },
|
{ text: '好评排序', value: 'b' },
|
||||||
{ text: '好评排序', value: 'b' },
|
{ text: '销量排序', value: 'c' },
|
||||||
{ text: '销量排序', value: 'c' },
|
],
|
||||||
],
|
|
||||||
},
|
|
||||||
'en-US': {
|
|
||||||
disableMenu: 'Disable Menu',
|
|
||||||
switchTitle1: 'Title',
|
|
||||||
switchTitle2: 'Title',
|
|
||||||
itemTitle: 'Title',
|
|
||||||
expandDirection: 'Expand Direction',
|
|
||||||
customContent: 'Custom Content',
|
|
||||||
customActiveColor: 'Custom Active Color',
|
|
||||||
option1: [
|
|
||||||
{ text: 'Option1', value: 0 },
|
|
||||||
{ text: 'Option2', value: 1 },
|
|
||||||
{ text: 'Option3', value: 2 },
|
|
||||||
],
|
|
||||||
option2: [
|
|
||||||
{ text: 'Option A', value: 'a' },
|
|
||||||
{ text: 'Option B', value: 'b' },
|
|
||||||
{ text: 'Option C', value: 'c' },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
|
'en-US': {
|
||||||
|
disableMenu: 'Disable Menu',
|
||||||
|
switchTitle1: 'Title',
|
||||||
|
switchTitle2: 'Title',
|
||||||
|
itemTitle: 'Title',
|
||||||
|
expandDirection: 'Expand Direction',
|
||||||
|
customContent: 'Custom Content',
|
||||||
|
customActiveColor: 'Custom Active Color',
|
||||||
|
option1: [
|
||||||
|
{ text: 'Option1', value: 0 },
|
||||||
|
{ text: 'Option2', value: 1 },
|
||||||
|
{ text: 'Option3', value: 2 },
|
||||||
|
],
|
||||||
|
option2: [
|
||||||
|
{ text: 'Option A', value: 'a' },
|
||||||
|
{ text: 'Option B', value: 'b' },
|
||||||
|
{ text: 'Option C', value: 'c' },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
data() {
|
export default {
|
||||||
return {
|
setup() {
|
||||||
RED,
|
const item = ref(null);
|
||||||
|
const t = useTranslate(i18n);
|
||||||
|
|
||||||
|
const state = reactive({
|
||||||
switch1: true,
|
switch1: true,
|
||||||
switch2: false,
|
switch2: false,
|
||||||
value1: 0,
|
value1: 0,
|
||||||
value2: 'a',
|
value2: 'a',
|
||||||
|
});
|
||||||
|
|
||||||
|
const option1 = computed(() => t('option1'));
|
||||||
|
const option2 = computed(() => t('option2'));
|
||||||
|
|
||||||
|
const onConfirm = () => {
|
||||||
|
item.value?.toggle();
|
||||||
};
|
};
|
||||||
},
|
|
||||||
|
|
||||||
computed: {
|
return {
|
||||||
option1() {
|
...toRefs(state),
|
||||||
return this.t('option1');
|
t,
|
||||||
},
|
RED,
|
||||||
|
item,
|
||||||
option2() {
|
option1,
|
||||||
return this.t('option2');
|
option2,
|
||||||
},
|
onConfirm,
|
||||||
},
|
};
|
||||||
|
|
||||||
methods: {
|
|
||||||
onConfirm() {
|
|
||||||
this.$refs.item.toggle();
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user