![](/img/trans.png)
[英]How to have multiple instances of vue-multiselect with a click of a button
[英]Toggle vue-multiselect close/open on button click
當我點擊按鈕時,多選打開。 但是當我第二次單擊該按鈕時,真/假值會閃爍,因此,isOpen 仍為真。 我究竟做錯了什么?
模板:
<div id="app">
<button @click="toggle">open and close later
</button>
<pre>{{ isOpen }}</pre>
<multiselect
ref="multiselect"
v-model="value"
:options="options"
:multiple="true"
track-by="library"
:custom-label="customLabel"
@close="isOpen = false"
@open="isOpen = true"
>
</multiselect>
</div>
js:
new Vue({
components: {
Multiselect: window.VueMultiselect.default
},
data: {
isOpen: false,
value: { language: 'JavaScript', library: 'Vue-Multiselect' },
options: [
{ language: 'JavaScript', library: 'Vue.js' },
{ language: 'JavaScript', library: 'Vue-Multiselect' },
{ language: 'JavaScript', library: 'Vuelidate' }
]
},
methods: {
toggle () {
if (this.isOpen) {
this.$refs.multiselect.$el.blur();
this.isOpen = false;
}
else {
this.$refs.multiselect.$el.focus();
this.isOpen = true;
}
}
}
}).$mount('#app')
不幸的是,當我挖掘這個組件的源代碼時,我意識到沒有任何“合法”的方式可以滿足您的要求。 無論如何都會調用@blur 回調。 沒有辦法規范這種行為。
解決方法:具有冷卻時間的鎖定的某些方面...
new Vue({
components: {
Multiselect: window.VueMultiselect.default
},
data: {
blocked: false,
value: { language: 'JavaScript', library: 'Vue-Multiselect' },
options: [
{ language: 'JavaScript', library: 'Vue.js' },
{ language: 'JavaScript', library: 'Vue-Multiselect' },
{ language: 'JavaScript', library: 'Vuelidate' }
]
},
methods: {
toggle () {
if (!this.blocked) {
this.$refs.multiselect.toggle();
}
},
block () {
this.blocked = true;
setTimeout(() => {
this.blocked = false;
}, 200);
}
}
}).$mount('#app')
這里的問題是VueMultiselect
在組件外單擊時關閉。
因此,當您按下單擊按鈕(在您的鼠標上)時, VueMultiselect
關閉,當您釋放單擊按鈕時,您實際上是在重新打開VueMultiselect
因為isOpen
在close
事件中設置為 false。
所以你的按鈕只能是一個打開按鈕。
編輯:
最好的解決方案是在VueMultiselect
打開時隱藏按鈕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.