我正在尝试为Bootstrap构建一个自定义指令,该指令将<select>
输入到&#34; selectpicker&#34;来自Bootstrap selectpicker
另外,我希望此指令使用VueJS的默认options
功能来填充<select>
上的选项
所以html会是这样的:
<select v-selectpicker="myValue" options="myOptions"></select>
现在我可以完美地创建指令并使用bind
方法在元素上调用selectpicker()
方法。问题似乎是在调用selectpicker()
之后设置了选项。
所以我需要等到设置选项,或者在设置选项时我必须再次调用selectpicker(refresh)
。
有人知道这是否可行?
答案 0 :(得分:3)
只有当您从服务器提供选项时,提供的答案才有效。尝试初始化Bootstrap-select使用Vue数据作为选项总是在呈现选项之前调用它。
我的解决方案是使用一个组件并将选项/选择名称和回调函数作为道具传递,我可以确定它们都已加载。
<select-picker :name.sync="itemsPerPage" :options.sync="itemsPerPageOptions" :function="changeItemsPerPage"></select-picker>
Vue.component('select-picker', {
template:'<select v-model="name" class="themed-select" @change="function">' +
'<option v-bind:value="option.value" v-for="option in options">{{ option.label }}</option>' +
'</select>',
name: 'selectpicker',
props: ['options', 'name', 'function'],
updated: function() {
console.log(this);
$(this.$el).selectpicker({
iconBase: 'fa',
tickIcon: 'fa-check'
});
}
});
答案 1 :(得分:1)
我改变了mocheaz的一点解决方案。如果动态放置select标记,它已经设置了初始值:
require('bootstrap-select');
Vue.directive('selectpicker',
{
twoWay: true,
bind()
{
$(this.el).selectpicker();
$(this.el).on('change', function(e) {
this.set($(this.el).val());
}.bind(this));
},
update(newValue)
{
$(this.el).val(newValue);
$(this.el).selectpicker('val', newValue);
},
unbind()
{
$(this.el).selectpicker('destroy');
}
});
答案 2 :(得分:0)
我这样做了,它对我有用。
Vue.directive('selectpicker', {
twoWay: true,
bind: function() {
$(this.el).on("change", function(e) {
this.set($(this.el).val());
}.bind(this));
},
update: function(nv, ov) {
$(this.el).trigger("change");
}
});
答案 3 :(得分:0)
这对于那些正在寻找能够使用bootstrap-select和vue.js(v2.5)的人来说非常有用
指令:
Vue.directive('selectpicker',
{
inserted(el) {
$(el).selectpicker(
{/*options*/},
});
},
update(el, binding) {
$(el).selectpicker('val', binding.value);
},
componentUpdated(el) {
$(el).selectpicker('refresh');
},
unbindel() {
$(el).selectpicker('destroy');
}
});
HTML:
<select
class="selectpicker form-control"
v-selectpicker="mySelectedModel"
v-model="mySelectedModel">
<!-- options -->
</select>
答案 4 :(得分:0)
Vue.directive('selectpicker',{
inserted:function(el) {
jQuery(el).selectpicker({
title: 'Choose...',
liveSearch:true,
dataHeader:"Type in to filter",
style: 'btn btn-default btn-round',
size: 10
}).selectpicker('render');
},
componentUpdated:function(el, binding) {
jQuery(el).selectpicker('val', binding.value);
jQuery(el).selectpicker('refresh');
}
});
用法:
<select class="form-control" v-model="causeOfLoss" v-selectpicker="causeOfLoss"> ... </select>