Свойство checked сделать массивом, который будет содержать состояния чекбоксов. Сами чекбоксы на основе этого массива и создавать, через
v-for
. Слушать событие change, по которому выставлять состояния предыдущих чекбоксов (относительно того, на котором событие случилось) в true, следующих в false:
data: () => ({
checked: [ 0, 0, 0, 0, 0 ],
}),
methods: {
onChange(e, index) {
const checked = e.target.checked;
this.checked = [
...Array(index + checked).fill(1),
...Array(this.checked.length - index - checked).fill(0),
];
},
},
<li v-for="(n, i) in checked">
<label>
<input
type="checkbox"
:checked="n"
@change="onChange($event, i)"
>
{{ i + 1 }}
</label>
</li>
UPD. Вынесено из комментариев:
а если несколько таких списков будет
Очевидно, нужен отдельный массив checked для каждого списка (если только вы не хотите, чтобы все списке выглядели одинаково). Что касается функции onChange, то надо будет добавить ей дополнительный параметр - чтобы была возможность указывать, с каким именно списком в данный момент идёт работа.
https://jsfiddle.net/9ba682w4/