I am trying to add form inputs for a nested array. I can loop over to show hard coded items to the page, but when I add a form to addto the array, I get a blank screen.
addNewSection
<form v-on:submit.prevent="addNewSection">
<div class="form-group m-form__group">
<input v-model="sections.name" placeholder="Name" class="form-control m-input" style="margin-bottom: .5rem"/>
<textarea v-model="sections.description" placeholder="Description" class="form-control m-input" style="margin-bottom: .5rem"/></textarea>
<button type="submit" class="btn btn-primary">Add Section</button>
</div>
</form>
addNewItem
<form v-on:submit="addNewItem">
<div class="form-group m-form__group">
<input v-model="sections.items.name" placeholder="Name" class="form-control m-input" style="margin-bottom: .5rem"/>
<textarea v-model="sections.items.description" placeholder="Description" class="form-control m-input" style="margin-bottom: .5rem"/></textarea>
<button type="submit" class="btn btn-primary">Add Section</button>
</div>
</form>
script
new Vue({
el: "#main",
data: {
sections: [
{
name: "Salad",
description: 'Add chicken to any salad for $3.00',
items: [
{
name: 'Antipasto',
description: 'Mixed greens, Italian meats, cheeses, giardiniera pickled veggies, tomatoes, roasted peppers, onions with house Italian vinaigrette',
price: '$13.00'
},
{
name: 'Basic',
description: 'Mixed greens, Italian meats, cheeses, giardiniera pickled veggies, tomatoes, roasted peppers, onions with house Italian vinaigrette.',
price: '$5.00 / $7.50'
},
{
name: 'Caesar',
description: 'Romaine, Caesar dressing, croutons, shaved parmesan',
price: '$5.00 / $7.50'
}
]
},
{
name: "Sandwiches",
description: 'Add cheese to any salad for $3.00',
items: [
{
name: 'Sandwich 1',
description: 'Mixed greens, Italian meats, cheeses, giardiniera pickled veggies, tomatoes, roasted peppers, onions with house Italian vinaigrette',
price: '$13.00'
},
{
name: 'Sandwich 2',
description: 'Mixed greens, Italian meats, cheeses, giardiniera pickled veggies, tomatoes, roasted peppers, onions with house Italian vinaigrette.',
price: '$5.00 / $7.50'
},
{
name: 'Sandwich 3',
description: 'Romaine, Caesar dressing, croutons, shaved parmesan',
price: '$5.00 / $7.50'
}
]
},
{
name: "Pizzas",
description: 'Add Pepperonis to any salad for $3.00',
items: [
{
name: 'Pizza 1',
description: 'Mixed greens, Italian meats, cheeses, giardiniera pickled veggies, tomatoes, roasted peppers, onions with house Italian vinaigrette',
price: '$13.00'
},
{
name: 'Pizza 2',
description: 'Mixed greens, Italian meats, cheeses, giardiniera pickled veggies, tomatoes, roasted peppers, onions with house Italian vinaigrette.',
price: '$5.00 / $7.50'
},
{
name: 'Pizza 3',
description: 'Romaine, Caesar dressing, croutons, shaved parmesan',
price: '$5.00 / $7.50'
}
]
}
]
},
methods: {
deleteSection: function (index) {
this.sections.splice(index, 1);
},
addNewSection(e) {
this.sections.push(
{
name: this.sections.name,
description: this.sections.description
}
);
this.sections.name = "";
this.sections.description = "";
e.preventDefault();
},
addNewItem(e) {
this.section.items.push(
{
name: this.section.items.name,
description: this.section.items.description
}
);
this.section.items.name = "";
this.section.items.description = "";
e.preventDefault();
},
deleteItem: function (index) {
this.section.items.splice(index, 1);
},
}
});
</script>
If you look at the above code, I have 3 sections and items hard-coded for testing. I am able to loop over and display sections and nested items successfully. Its the addNewItem and deleteItem I am having issues with. If I get help with the add item, I can figure out the delete.
<div v-for="s in sections"></div>wrapped around the outer div inside the form, but all it did was repeat the input fields for as many sections, which is how aforloop is supposed to work, so I figured I was doing something wrong