Пишу маленькое приложение на 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, и что конкретно нужно указать в нем в данном случае.