Массив Vue.js путается после перезагрузки данных - PullRequest
0 голосов
/ 16 января 2019

Данные в массиве Vue.js с объектами JSON в нем смешиваются после перезагрузки их из бэкэнда Spring.

Я пытаюсь создать веб-интерфейс с Vue.js для редактирования данных в бэкэнде Spring. Vue.js вызывает бэкэнд с помощью axios, возвращает список элементов, отображаемых на странице с помощью v-for. Элементы можно редактировать отдельно, при нажатии кнопки «Сохранить» для элемента, элемент отправляется на сервер и данные обновляются в базе данных. После этого, когда я нажимаю кнопку перезагрузки в браузере (или закрываю и открываю ту же страницу), данные загружаются с сервера, но смешиваются.

loadExercises(){     
           axios({url:'http://localhost:5000/exercises/all'}).then(resp => {
                    this.exercises = resp.data;
                })
            }

Это функция, которая загружает данные.

Это изначально массив: https://imgur.com/5x8TiwY

Это массив после перезагрузки, я отредактировал первую запись: https://imgur.com/d6G4SMm

Бэкэнд возвращает правильные объекты, единственное отличие состоит в том, что запись, которая была отредактирована, является последней в массиве (и она была первой в примере примера перед редактированием). Идентификаторы не меняются при сохранении, обновляются только детали, такие как имя или описание.

Это часть шаблона, которая генерирует html, на тот случай, если что-то там есть.

<div role="tablist" id="container" v-bind:key="ex.id" v-for="ex in exercises">
            <b-card no-body class="mb-1 customcard">
                <b-card-header header-tag="header" class="p-1 alignleft" role="tab"  v-b-toggle="`accordion${ex.id}`">
                    <span>{{ex.name}}</span>
                </b-card-header>
                <b-collapse v-bind:id="`accordion${ex.id}`" accordion="my-accordion" role="tabpanel">
                    <b-card-body class = "alignleft">
                        <p class="card-text">
                            Name: <b-form-input
                                v-bind:value="`${ex.name}`"
                                v-bind:id="`input${ex.id}`"
                                v-on:input="saveExName(ex.id)"></b-form-input>
                            Target: {{ex.target}} <b-form-select v-on:input="onTargetChange(ex.id)"
                                                                 v-bind:id="`target${ex.id}`" >
                            <option v-bind:key = "target" v-for="target in targets" :value="target" >{{target}}</option>

                            </b-form-select>
                            Description: <b-form-textarea
                                v-bind:value="`${ex.description}`"
                                :rows="3"
                                :max-rows="6"
                                v-on:input="saveExDesc(ex.id)"
                                v-bind:id="`textarea${ex.id}`"></b-form-textarea>
                        </p>
                        <div class="alignright">
                            <b-button v-on:click="saveExUpdate(ex.id)">Save</b-button>
                        </div>

                    </b-card-body>
                </b-collapse>
            </b-card>
        </div>

Есть идеи, почему это происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...