В этой скрипте: https://jsfiddle.net/djsuperfive/svctngeb/ я хочу перевернуть массив structure
в data
, когда я нажимаю кнопку.
Почему отображаемый список и дамп structure
не реагируют, а console.info
отражают, что обратное было эффективным?
Код :
HTML
<div id = "app">
<draggable v-model = "structure">
<div v-for = "(item, index) in structure" :style = "'background-color:'+item.color">
{{ item.title }}
</div>
</draggable>
<button type = "button" @click = "reverse()">Reverse structure</button>
<hr>
<strong>dump structure:</strong>
<pre>
{{ structure }}
</pre>
</div>
JS:
new Vue({
el: '#app',
data() {
return {
structure: [{
title: 'Item A',
color: '#ff0000'
},
{
title: 'Item B',
color: '#00ff00'
},
{
title: 'Item C',
color: '#0000ff'
},
],
}
},
methods: {
reverse() {
console.info(this.structure[0].title);
_.reverse(this.structure);
console.info(this.structure[0].title);
}
}
});
Спасибо
Максимум! Попробуйте заменить строку:
_.reverse(this.structure);
с участием
this.structure.reverse();
Я думаю, в Underscore.js нет метода reverse
, потому что в JavaScript есть собственный.
Все должно нормально работать с родным Обратная функция массива JS.
Удачи!
Приятно это слышать!) Поздравляю =)
Проблема здесь, похоже, в том, что Vue не обнаруживает, что ваш массив изменился: https://vuejs.org/v2/guide/reactivity.html#Change-Detection-Предостережения
Решение состоит в том, чтобы либо заменить this.structure
новым массивом, либо использовать обратную функцию, использующую Vue.set().
this.structure = _.clone(_.reverse(this.structure));
Вы правы Евгений! Я также только что обнаружил, что он работает с собственным обратным методом.