Мне кажется, я понимаю, что вы хотите сделать.Я сделал небольшой пример того, что вы пытаетесь сделать из JS Fiddle:
Сценарий:
new Vue({
el: "#app",
data: {
medicines: [
{
name: 'greatMedicine',
id: 1,
price: '100',
substitutes: [
{
name: 'notSoGreatButCheaper',
id: 3,
price: '20',
}
]
},
{
name: 'anotherGreatMedicine',
id: 2,
price: '150',
substitutes: [
{
name: 'alsoGreatButCheaper',
id: 4,
price: '30',
}
]
}
],
showSubsMed: '-1'
},
methods: {
substitute: function(med_index,sub_index){
let medicine = this.medicines[med_index];
let substitute = medicine.substitutes[sub_index];
this.medicines.splice(med_index, 1, substitute);
}
}
})
HTML:
<div id="app">
<h2>Medicines:</h2>
<ol>
<li v-for="(med,med_index) in medicines">
{{med.name}} - {{med.price}}€
<span v-if="med.substitutes">
<button @click="showSubsMed === med.id ? showSubsMed = -1 : showSubsMed = med.id" class="btn-primary">
<span v-if="showSubsMed === med.id">hide subs</span>
<span v-else>show subs</span>
</button>
<ol>
<li v-show="showSubsMed === med.id" v-for="(sub,sub_index) in med.substitutes" class="sub">
{{sub.name}} - {{sub.price}}€ <button @click="substitute(med_index,sub_index)" class="btn-primary">Substitute!</button>
</li>
</ol>
</span>
</li>
</ol>
</div>
https://jsfiddle.net/5mt0Loka/1/