将Bootstrap Select封装为Vue 2.0组件
作者:云间搭桥时间:2026-10-22 03:11:30浏览:539
本文介绍如何将功能强大的Bootstrap Select插件封装为Vue 2.0组件。通过定义props和template,实现数据绑定与样式复用。重点解决多Select复用导致的对象错位问题,利用key属性确保渲染正确性,并提供完整的组件代码示例。
Bootstrap Select封装为Vue 2.0组件
由于Bootstrap Select功能丰富且样式美观,在基于Vue的项目中,考虑将其封装为Vue组件以提高复用性。
HTML模板示例
具体代码如下:
<my-select :options="input.options" v-model="input.value" ref="typeSelect" :index="index" :childidx="childIdx" :load="load" :multiple="input.multiple" :method="change"></my-select>
在JavaScript实现中,当页面存在多个Select组件时,删除某个Select对象可能导致加载值错乱。经排查,这是Vue在重新渲染HTML时复用相同Vue对象所致,从而引发Select对象错位。解决此问题的方法是为每个Select组件添加唯一的key属性。尽管这可能会轻微影响性能,但能有效避免渲染错误。
// select 插件
Vue.component('vm-select', {
props : ['options', 'value', 'multiple', 'method', 'load', 'index', 'childidx'],
template : "<select :multiple='multiple' class='selectpicker' data-live-search='true' title='请选择' data-live-search-placeholder='搜索'><option :value='option.value' v-for='option in options'>{{ option.label }}</option></select>",
mounted : function () {
var vm = this;
$(this.$el).selectpicker('val', this.value != null ? this.value : null);
$(this.$el).on('changed.bs.select', function () {
vm.$emit('input', $(this).val());
if (typeof(vm.method) != 'undefined') {
vm.method(vm.index, vm.childidx, this.value);
}
});
$(this.$el).on('show.bs.select', function () {
if (typeof(vm.load) != 'undefined') {
vm.load(vm.index, vm.childidx);
}
});
},
updated : function () {
$(this.$el).selectpicker('refresh');
},
destroyed : function () {
$(this.$el).selectpicker('destroy');
}
});
在使用多个select时,删除某个select对象会导致加载值改变。经排查,这是Vue自身问题:Vue在重新渲染HTML时复用相同Vue对象,导致select对象错位。解决方案是为每个select对象添加key标签。尽管可能降低性能,但能避免错误。

Vue官网
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
作者最新文章
Vue.js 是什么:渐进式 JavaScript 框架的核心优势与适用场景
2026-11-03 20:00:13
为什么JS代码执行了但页面没有跳转
2026-11-03 16:29:09
Vue.js 项目中 Axios 拦截器封装与接口对接实战
2026-11-02 10:22:43
前端PC端自适应开发:两种常见适配方案解析
2026-11-01 03:30:54
Vue3中通过JS全局调用弹窗组件的实现方案
2026-10-31 21:34:31
