vue-multiselect是一款基于vuejs强大的下拉框组件。该下拉框组件支持单选和多选,支持选项搜索,支持异步获取选项等,功能十分强大。
vue-multiselect支持vue2.x和vue3.x,它的特点有:
- 不依赖于其他JavaScript库或框架。
- 允许用户从一组选项中选择一个选项。
- 允许用户从一组选项中选择多个选项。
- 允许用户输入自定义标签作为选项。
- 使用下拉菜单显示选项。
- 允许用户根据输入内容过滤选项。
- 提供搜索功能,并根据输入内容提供建议。
- 逻辑被拆分成多个可重用的代码块。
- 提供基本的组件,并支持自定义组件。
- 支持使用v-model指令进行双向数据绑定。
- 支持使用Vuex进行状态管理。
- 支持异步加载选项。
- 测试覆盖率超过95%。
- 可以通过一系列属性进行完全配置。
使用方法
安装
如果您想使用vue-multiselect下拉框组件,首先您需要安装它,命令如下:
npm install vue-multiselect
使用
在vue组件中使用:
<!-- Vue component --> <template> <div> <multiselect v-model="value" :options="options"></multiselect> </div> </template> <script> import Multiselect from 'vue-multiselect' // register globally Vue.component('multiselect', Multiselect) export default { // OR register locally components: { Multiselect }, data () { return { value: null, options: ['list', 'of', 'options'] } } } </script> <!-- New step! Add Multiselect CSS. Can be added as a static asset or inside a component. --> <style src="vue-multiselect/dist/vue-multiselect.min.css"></style> <style> your styles </style>
通过CDN引用
<script src="https://unpkg.com/vue-multiselect@2.1.6"></script> <link rel="stylesheet" href="https://unpkg.com/vue-multiselect@2.1.6/dist/vue-multiselect.min.css"> // register globally Vue.component('vue-multiselect', window.VueMultiselect.default)
使用示例
单选下拉框
multiselect( :value="value", :options="source", :searchable="false", :close-on-select="false", :allow-empty="false", @input="updateSelected", label="name", placeholder="Select one", track-by="name" )
带搜索的单选下拉框
multiselect( v-model="value", :options="source", :close-on-select="true", :clear-on-select="false", placeholder="Select one", label="name", track-by="name" )
带搜索的多选下拉框
multiselect( v-model="multiValue", :options="source", :multiple="true", :close-on-select="true", placeholder="Pick some", label="name", track-by="name" )
带tag标签的多选下拉框
multiselect( v-model="taggingSelected", :options="taggingOptions", :multiple="true", :taggable="true", @tag="addTag", tag-placeholder="Add this as new tag", placeholder="Type to search or add tag", label="name", track-by="code" ) addTag (newTag) { const tag = { name: newTag, code: newTag.substring(0, 2) + Math.floor((Math.random() * 10000000)) } this.taggingOptions.push(tag) this.taggingSelected.push(tag) },
异步下拉框
multiselect( v-model="selectedCountries", :options="countries", :multiple="multiple", :searchable="searchable", @search-change="asyncFind", placeholder="Type to search", label="name" track-by="code" ) span(slot="noResult"). Oops! No elements found. Consider changing the search query. methods: { asyncFind (query) { this.countries = findService(query) } }
详细的配置参数和事件方法,请参考https://vue-multiselect.js.org/