Вложенный v-for в vuejs для аккордеонных данных - PullRequest
0 голосов
/ 09 октября 2018

Я строю небольшое приложение на VueJS 2.5.17, где у меня есть вложенные данные аккордеона, которые мне нужно отображать через события щелчка, у меня есть иерархия Root -> Roles -> Specialisation -> withRoles .... и так далее.Я пытаюсь получить дочерние элементы при каждом щелчке их соответствующих родителей.

Ниже приводится мой HTML-код:

<div class="panel-group" id="accordion1" v-for="items in accordianData">

    <div class="panel my-panel-warning">
        <div class="panel-heading">
            <h4 class="panel-title">
                <a style="color: #000; font-size: 14px" data-toggle="collapse" data-parent="#accordion1" :href="'#'+items.id">DOCUMENTED RELATIONSHIPS ({{count}})</a>
            </h4>
        </div>
        <div :id="items.id" class="panel-collapse collapse">
            <div class="my-panel-body">
                <div class="my-panel-body">
                    <div class="panel-group" :id="items.id" >
                        <div class="panel my-panel-warning" v-for="child1 in roles">
                            <div class="panel-heading">
                                <a data-toggle="collapse" :data-parent="'#'+items.id" :id="'child'+child1.id" :href="'#role'+child1.id" @click="getSpecialisation(child1.id, child1.name)">{{child1.name+" (0)"}}</a>
                            </div>
                            <div class="my-panel-body">
                                <div :id="'role'+child1.id" class="panel-collapse collapse">
                                    <div class="panel my-panel-warning" v-if="child1.id === child2.parent_id" v-for="child2 in specialisations[child1.name]">
                                        <div class="panel-heading">
                                            <a data-toggle="collapse" :data-parent="'#role'+child1.id" :id="'child2'+child2.id" :href="'#spec'+child2.id" @click="getWithRoles(child2.id)">{{child2.name+" (0)"}}</a>
                                        </div>
                                        <div class="my-panel-body">
                                            <div :id="'spec'+child2.id" class="panel-collapse collapse">
                                                <div class="my-panel-body">
                                                .
                                                .
                                                .
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

И вызываю следующую функцию в моих методах:

getSpecialisation(id, name) {
    axios.get('specialisations?company_id='+this.company_id+'&role_id='+id, {headers: getHeader()}).then(response => {
        if(response.status === 200)
        {
            this.specialisations[name] = response.data.specialisations

        }
    })
},

Но кое-как я не могу отобразить данные.Ранее я пытался v-for="child2 in specialisations", а в ответ this.specialisations = response.data.specialisations я получал все похожие дочерние элементы для всех родителей, я знаю, что это неправильно, но просто хотел сообщить, что я получаю данные, и мой аккордеон отображает дочерние элементы, но как только ясделал в соответствии с указанным выше методом getSpecialisation, я не могу отобразить данные.

Я вижу свои данные в консоли Vue:

Specialisation Предложить мнелучший способ для этого.

Спасибо

1 Ответ

0 голосов
/ 09 октября 2018

Вместо this.specialisations[name] = response.data.specialisations try:

Vue.set(this.specialisations, name, response.data.specialisations)

Это должно вызвать Обнаружение изменений Vue .

Ps.Когда вы видите много вложений, это может быть хорошее время, чтобы разбить большой компонент на более мелкие.

...