简体   繁体   中英

How to have multiple instances of vue-multiselect with a click of a button

i want to have a vue-multiselect dropwn with a click of add more button

currently i don't know any good approach

Problem/Question: if i add 2 dropdowns, if i select a option same option is selected for other one also, i want to avoid that.

Note: each add more should have its own instance of vue-multiselect

 var app = new Vue({ el: '#app', components: { Multiselect: window.VueMultiselect.default }, data () { return { value: "", options:['Calender','Range','Amount'], multiselectList:[], } }, methods:{ AddMoreMultiselect(){ this.multiselectList.push('1 more multiselect'); }, remove(index){ this.multiselectList.splice(index,1) } }, })
 #app{ //margin-top:30px; } .items{ display: flex; justify-content: space-between; } .multiselect{ width: 80%; }
 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://unpkg.com/vue-multiselect@2.1.0"></script> <link rel="stylesheet" href="https://unpkg.com/vue-multiselect@2.1.0/dist/vue-multiselect.min.css"> <script defer src="https://use.fontawesome.com/releases/v5.3.1/js/all.js"></script> <div id="app"> <div><button @click="AddMoreMultiselect()">Add More</button></div> <div class="items" v-for="(multiselect,index) in multiselectList" :key="index"> <multiselect v-model="value" :options="options" :multiple="false" :taggable="false" ></multiselect> <div><button @click="remove(index)">Remove</button></div> </div> </div>

Define value as an empty array then bind each select to the respective value in that array based on the loop index v-model="value[index]" :

 var app = new Vue({ el: '#app', components: { Multiselect: window.VueMultiselect.default }, data() { return { value: [], options: ['Calender', 'Range', 'Amount'], multiselectList: [], } }, methods: { AddMoreMultiselect() { this.multiselectList.push('1 more multiselect'); }, remove(index) { this.multiselectList.splice(index, 1) } }, })
 #app { //margin-top:30px; } .items { display: flex; justify-content: space-between; } .multiselect { width: 80%; }
 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script src="https://unpkg.com/vue-multiselect@2.1.0"></script> <link rel="stylesheet" href="https://unpkg.com/vue-multiselect@2.1.0/dist/vue-multiselect.min.css"> <script defer src="https://use.fontawesome.com/releases/v5.3.1/js/all.js"></script> <div id="app"> <div><button @click="AddMoreMultiselect()">Add More</button></div> <div class="items" v-for="(multiselect,index) in multiselectList" :key="index"> <multiselect v-model="value[index]" :options="options" :multiple="false" :taggable="false"></multiselect> <div><button @click="remove(index)">Remove</button></div> </div> </div>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM