Простое решение состоит в том, чтобы использовать вычисляемое свойство вашего items
, которое переворачивает массив (не изменяя его на месте, если он используется как prop
, или для сохраненияего порядок как первоначально объявлено): reversedItems() { return this.items.slice().reverse(); }
Пример кода:
new Vue({
el: "#app",
data() {
return {
items: ["item 1", "item 2", "item 3"],
}
},
computed: {
reversedItems() {
// Reverse a COPY of the array to avoid messing with its initial order.
return this.items.slice().reverse();
},
},
methods: {
loadItem() {
const i = this.items.length;
// Append to the end of the array in a simple approach,
// and let the computed property re-order the array.
this.items.push("item " + (i + 1));
},
},
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="app">
<ul>
<li v-for="item in reversedItems">{{ item }}</li>
</ul>
<button @click="loadItem">Load item</button>
</div>
Обратите внимание, что Vue исправляет методы массива (как reverse
) при применении к реактивным данным (как переменные, которые вы объявляете в data
), так что результат также является реактивным.Вот почему данные reversedItems
в ответе @ sovalina становятся реагирующими на items
модификации, тогда как они назначаются только один раз, когда компонент монтируется.