VueJS проблема привязки данных вычисляемых свойств - PullRequest
0 голосов
/ 08 мая 2020

https://jsfiddle.net/rohan0793/h7gn8qdv/

Итак, я пытался реализовать простой список задач с вычисленными свойствами, как в приведенной выше скрипке. Всего 3 списка. Все задачи. Выполненные задачи. Незавершенные задачи. Проблема в том, что если я устанавливаю флажок незавершенной задачи в «Неполном списке» или полной задачи в «Завершенном списке», задача под ней также переключается. Я не уверен, почему такое поведение. Это потому, что событие каким-то образом распространяется? Я тоже пробовал @click.stop на флажках, но безуспешно

1 Ответ

3 голосов
/ 08 мая 2020

Проблема здесь в том, что вы не используете атрибут key в l oop. Специальный атрибут key в основном используется в качестве подсказки для алгоритма виртуальной DOM Vue для идентификации VNodes при сравнении нового списка узлов со старым списком.

Без ключей, Vue использует алгоритм, который минимизирует перемещение элементов и пытается исправлять / повторно использовать элементы того же типа на месте, насколько это возможно. Таким образом, вы получаете следующее поведение:

, если я установлю флажок незавершенной задачи в Незавершенном списке или полной задачи в Завершенном списке, задача под ней также переключается.

Итак, чтобы решить эту проблему, вам просто нужно привязать key к каждому l oop, например:

<li v-for="task in incompleteTasks" :key="task.id">
   <input type="checkbox" v-model=task.completed>{{ task.description }}
</li> 

С ключами он будет переупорядочивать элементы в зависимости от изменения порядка ключей , а элементы с ключами, которых больше нет, всегда будут удалены / уничтожены.

Рабочий скрипт

...