Это очень сбивает с толку - и я бы даже подумал, что здесь ошибка.
https://jsbin.com/qadunor/edit?html, js, вывод
updateList(containerDom) {
return () => {
Array.from(containerDom.querySelectorAll(".list-group-item")).forEach((domItem, idx) => {
let listItemIndex = this.list.findIndex(listItem => listItem.name === domItem.innerText)
let listItem = this.list[listItemIndex]
listItem.pos = idx
this.list.splice(listItemIndex, 1, listItem)
})
}
}
Если перетащить от первого элемента списка («животное») до последнего элемента списка («нарукавная повязка»), чтобы по существу выполнить обмен (с помощью Sortable. js), вы увидите, что список является реактивным - вы можете увидеть это в вывод - он обновил свою позицию, но "v-for" l oop не отреагировал должным образом.
Он каким-то образом реагирует - но не правильно, как вы увидите (неправильно сбрасывает повязку во вторую позицию). Теперь, если бы я просто использовал Sortable. js, своп работал нормально (ie если я не обрабатываю событие onUpdate - просто закомментируйте его). Я знаю, что могу использовать VUE .draggable (или как там он называется, где он поддерживает внутренний список, но по ряду более сложных причин я не могу использовать эту библиотеку). Мой вариант использования, в котором я хочу использовать вышеупомянутую технику, здесь не имеет значения - я просто хочу знать, почему именно этот способ не работает для "v-for".
Я знаю, что это как-то связано с фактом that Sortable. js выполняет свои собственные манипуляции с DOM, но я ожидал, что после того, как массив списка будет изменен, v-for l oop должен отреагировать соответствующим образом - но это как бы сбивает с толку то, что в настоящее время находится в DOM .