Vue.component('todo-item', {
template: '\
<tr><td>\
{{ title }}\
<button v-on:click="$emit(\'remove\')">Remove</button>\
</td></tr>\
',
props: ['title']
})
new Vue({
el: '#todo-list-example',
data: {
newTodoText: '',
todos: [{
id: 1,
title: 'Do the dishes',
},
{
id: 2,
title: 'Take out the trash',
},
{
id: 3,
title: 'Mow the lawn'
}
],
nextTodoId: 4
},
methods: {
addNewTodo: function() {
this.todos.push({
id: this.nextTodoId++,
title: this.newTodoText
})
this.newTodoText = ''
}
}
})
tr,
td {
/* Cells will be RED if hoisted out of the table */
background-color: red;
}
table tr,
table td {
/* Cells will be GREEN if kept inside the table */
background-color: green;
}
<script src="https://unpkg.com/vue@2"></script>
<div id="todo-list-example">
<form v-on:submit.prevent="addNewTodo">
<label for="new-todo">Add a todo</label>
<input v-model="newTodoText" id="new-todo" placeholder="E.g. Feed the cat">
<button>Add</button>
</form>
<table>
<!-- Using directly the Component in real DOM -->
<todo-item
v-for="(todo, index) in todos"
v-bind:key="todo.id"
v-bind:title="todo.title"
v-on:remove="todos.splice(index, 1)"
></todo-item>
</table>
</div>