Задать вопрос

Vue.js. Почему при обновлении через Ajax, данные каждый раз переписываются, даже если они не изменились?

Пишу маленькое приложение на vue.js - всплывающие уведомления.
Данные запрашиваю ajax'ом. И сейчас получается, что при каждом запросе, данные в шаблоне перерисовываются. Пытался завернуть список сообщений в transition-group, но получаю не тот эффект который ожидал, из-за того что данные каждый раз перезаписываются.
Как сделать чтобы обновлялись только изменившиеся элементы?

Vue.js:
alarm_app = new Vue({
        delimiters: ['{*', '*}'],
        el: '#alarm-app',
        data: {
            data: [],
            delta: []
        },

        created() { this.getData(); },

        methods:{
            // Получаем данные для уведомлений
            getData: function() {
              $.ajax({
                url: '/check-state/',
                type: 'POST',
                contentType: 'application/json; charset=utf-8',
                processData: false,
                data: JSON.stringify(this.data),
                success: function (data) {
                    alarm_app.data = JSON.parse(data['newstate']);
                    alarm_app.delta = data['delta'];
                }
              });
            }
        }
    });


HTML:
<div id="alarm-app">
        <div v-if="delta != ''">
            <transition-group name="fade" tag="div">
            <div v-for="it in delta" v-bind:key="it">
                <div class="obj-name">{* it.object_name *}</div>
            </div>
            </transition-group>
        </div>
    </div>


UPD:
Обнаружил сейчас что если убрать transition-group и v-bind:key="it", то элементы не перерисовываются. Обновляются только при изменении.
Если добавить transition-group, то он требует v-bind:key. Я не очень понимаю что делает v-bind, и что конкретно нужно указать в нем в данном случае.
  • Вопрос задан
  • 517 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
kulakoff
@kulakoff Куратор тега Vue.js
Vue.js developing
А имеет элемент it какой-то свой уникальный id? Если да, то может попробовать его использовать в v-bind:key. Похоже сейчас сюда постоянно попадает новый объект, что заставляет произвести полную перерисовку.
Ответ написан
chewarer
@chewarer Автор вопроса
Отвечу сам.
Изменил v-bind:key="it" на v-bind:key="it.st"
Полагаю значение it.st должно быть уникальным, а у меня они могут совпадать. Тем не менее так работает
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы