Programmatically render multiple modal boxes in the same component in Vue
P粉627027031
P粉627027031 2023-08-28 16:23:40
0
1
515
<p>In my component, I have three popup modals with different content. By clicking on a specific button, I need to open the corresponding popup modal. </p> <p>This is what I'm doing <strong>For button 1 -</strong></p> <pre class="brush:php;toolbar:false;"><s-button type="button" class="bl_btn" @click="onClickProdOpen"> Product Details </s-button></pre> <p><strong>For this modal 1 will be </strong></p> <pre class="brush:php;toolbar:false;"><s-modal v-model="isShowPopup1" :title="$t('LBL_PROD_CONT')" <my-component-one :pageId ="this.$options.name" :popupDefaultTab="popupOpenDefaultTab" :onClickClose="onClickclose" /></pre> <p><strong>Here is a button click method. Click events for multiple different modal boxes like this. </strong></p> <pre class="brush:php;toolbar:false;">methods: { onClickProdOpen() { this.isShowPopup1 = true; this.popupOpenDefaultTab = 0; } }</pre> <p><s-modal is the custom modal box part, the content will be different. So, I repeated this modal code and just changed the content, i.e. passed different child components (MyComponentOne, MyComponentTwo...). </p> <p>So, how can I use a switch case statement to avoid repeating the modal box code multiple times and just change the inner content component? Any suggestions will be helpful. </p>
P粉627027031
P粉627027031

reply all(1)
P粉256487077

One option is to put the state of each modal in an object. This way, you don't need to add a data attribute to each modal.

If the content inside the modal is similar enough, you can use v-for, using the index as the key in the same way.

<b-modal v-model="modal_states[1]">模态框1</b-modal>
    <b-button @click="openModal(1)">打开1</b-button>
    
    <b-modal v-model="modal_states[2]">模态框2</b-modal>
    <b-button @click="openModal(2)">打开2</b-button>
    
    <b-modal v-model="modal_states[3]">模态框3</b-modal>
    <b-button @click="openModal(3)">打开3</b-button>
data: {
    modal_states: {},
  },
  methods: {
    openModal(index){
      this.modal_states = {[index.toString()]:true}
    }
  },

https://codepen.io/timfranklin/pen/abWEwLy?editors=1111

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!