1

Looking for some help looping over an array to create buttons in multiple modal windows.

The first set of buttons works as intended (opens the first Modal window - which should list the next set of buttons) however after clicking the button - the nested array of options does not appear in the new modal window (it opens but it is empty). Any ideas how to get the optional buttons to appear when the previous button is clicked? My source is not returning any errors.

Javascript

new Vue({
  el: '#app',
  data: {
    showModal: false,
    showModal2: false,
    buttons: [
        { name: 'Furniture', 
            options:[
                { name: 'Add' },
                { name: 'Edit' },
                { name: 'Remove' }
            ]
        },
        { name: 'Cars', 
            options:[
                { name: 'Add' }
            ]
        },
    ]
    }
 }
)

HTML

<div id="app">
    <button v-for="item in buttons" id="show-modal" @click="showModal = true">{{ item.name }}</button>
        <modal v-if="showModal" @close="showModal = false">
            <h3 slot="header">What would you like to do?</h3>
                <h3 slot="body">
                    <button v-for="item in buttons.options" id="show-modal2" @click="showModal2 = true">{{ item.name }}</button>
                        <modal v-if="showModal2" @close="showModal2 = false">
                            <h3 slot="header">2nd Modal Window</h3>
                                <h3 slot="body">
                                </h3>
                        </modal>
                </h3>
        </modal>
</div>

1 Answer 1

2

When you click on the button of the first level, you must transfer its options to the modal window via an intermediate variable. For example:

<button v-for="item in buttons" 
        id="show-modal" 
        @click="(options = item.options) && (showModal = true)"
>{{ item.name }}</button>

[ https://jsfiddle.net/7hcwreob/ ]

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.