封装一个包含van-popup van-dropdown-menu 并可以写入内容的组件
时间: 2023-08-08 17:07:16 浏览: 110
微信小程序组件封装
可以使用 Vue.js 框架来封装一个包含 `van-popup` 和 `van-dropdown-menu` 的组件。
首先,创建一个名为 `MyDropdown` 的组件:
```html
<template>
<van-popup v-model="visible" position="bottom">
<van-dropdown-menu @select="handleSelect">
<template v-for="(item, index) in options">
<van-dropdown-item :key="index" :value="item.value">{{ item.label }}</van-dropdown-item>
</template>
</van-dropdown-menu>
</van-popup>
</template>
<script>
import { VanPopup, VanDropdownMenu, VanDropdownItem } from 'vant';
export default {
name: 'MyDropdown',
components: {
VanPopup,
VanDropdownMenu,
VanDropdownItem,
},
props: {
options: {
type: Array,
default: () => [],
},
value: {
type: [String, Number],
default: '',
},
},
data() {
return {
visible: false,
};
},
methods: {
handleSelect(value) {
this.$emit('input', value);
this.visible = false;
},
},
computed: {
selectedLabel() {
const selectedItem = this.options.find(item => item.value === this.value);
return selectedItem ? selectedItem.label : '';
},
},
};
</script>
```
在上面的代码中,我们引入了 `van-popup`、`van-dropdown-menu` 和 `van-dropdown-item` 组件,并将它们注册到了 `MyDropdown` 组件中。同时,我们定义了两个 props:`options` 和 `value`。`options` 是下拉框的选项列表,`value` 是当前选中的值。我们还定义了一个 `visible` 变量,用于控制下拉框的显示和隐藏。
在组件的模板中,我们使用 `van-popup` 组件来包裹 `van-dropdown-menu` 组件,并设置了 `position="bottom"`,表示下拉框在底部弹出。在 `van-dropdown-menu` 中,我们使用 `v-for` 指令来循环渲染选项列表。每个选项都使用 `van-dropdown-item` 组件来显示。
在组件的方法中,我们定义了一个 `handleSelect` 方法,用于处理选中选项的事件。当用户选中一个选项时,我们通过 `this.$emit('input', value)` 来触发一个 `input` 事件,并将选中的值作为参数传递出去。然后,我们将 `visible` 设置为 `false`,隐藏下拉框。
最后,我们使用 `computed` 计算属性来根据当前选中的值来获取选中的标签。这个标签会在组件中显示。
现在,我们可以在其他组件中使用 `MyDropdown` 组件来创建一个包含 `van-popup` 和 `van-dropdown-menu` 的下拉框,并可以通过 `options` 和 `value` props 来设置选项和当前选中的值:
```html
<template>
<div>
<my-dropdown :options="options" v-model="selectedValue" />
<p>你选中了:{{ selectedLabel }}</p>
</div>
</template>
<script>
import MyDropdown from './MyDropdown';
export default {
name: 'MyComponent',
components: {
MyDropdown,
},
data() {
return {
options: [
{ label: '选项1', value: '1' },
{ label: '选项2', value: '2' },
{ label: '选项3', value: '3' },
],
selectedValue: '',
};
},
computed: {
selectedLabel() {
const selectedItem = this.options.find(item => item.value === this.selectedValue);
return selectedItem ? selectedItem.label : '';
},
},
};
</script>
```
在上面的代码中,我们使用 `MyDropdown` 组件来创建一个下拉框,并设置了 `options` 和 `selectedValue` props。我们还使用 `v-model` 指令将 `selectedValue` 绑定到组件的值上。在模板中,我们使用 `p` 元素来显示当前选中的标签。
阅读全文