Вы не можете. Элемент списка потеряет свои данные после повторного рендеринга.
Необходимо добавить выбранное свойство к объекту item в компоненте списка.
Vue.component('list-item', {
props: ['item'],
methods: {
click() {
this.$emit('clicked');
}
},
template: `
<li :class="{ selected : item.selected }" @click="click">{{ item.text }}</li>
`
});
var idx = 0;
Vue.component('list', {
data() {
return {
list: [],
}
},
methods: {
additem() {
this.list.push({
text: "li " + idx++,
selected: false,
});
},
onClick(item) {
item.selected = !item.selected;
},
},
template: `
<div>
<button v-on:click="additem">Add</button>
<ul>
<list-item
v-for="item in list"
:item="item"
@clicked="onClick(item)"
:key="item.text">
</list-item>
</ul>
</div>
`
});
var demo = new Vue({
el: "#demo"
});