v-on, v-attr, v-classで機能追加しています。データの追加はpush,削除はspliceです。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My ToDos</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="styles.css">
<style>
body {
font-size: 13px;
font-family: Arial;
}
h1 {
font-size: 14px;
border-bottom:1px solid #ddd;
padding: 0 0 5px;
}
ul {
list-style-type: none;
padding: 0;
margin: 0 0 5px;
}
ul > li {
padding: 0 0 5px;
}
input[type=text]{
padding: 4px;
border-radius: 4px;
}
.done {
text-decoration: line-through;
color: #aaa;
}
.linkLike {
color: blue;
cursor: pointer;
font-weight: normal;
}
</style>
</head>
<body>
<div id="myapp">
<h1>
My ToDos
<small>({{remaining}}/{{todos.length}})</small>
<span class="linkLike" v-on="click:purge">[purge]</span>
</h1>
<ul>
<li v-repeat="todos">
<input type="checkbox" v-attr="checked: done" v-on="click: done = !done">
<span v-class="done: done">{{task}}</span>
<span class="linkLike" v-on="click:del($index)">[x]</span>
</li>
</ul>
<input type="text" v-model="newTask" placeholder="new task..." v-on="keyup:add | key enter">
</div>
<script src="http://cdnjs.cloudflare.com/ajax/libs/vue/0.11.4/vue.min.js"></script>
<script>
var vm = new Vue({
el: '#myapp',
data: {
newTask: '',
todos : [
{task: 'task 1', done: false},
{task: 'task 2', done: true},
{task: 'task 3', done: false}
]
},
computed: {
remaining: function(){
var count = 0;
for (var i = 0, j = this.todos.length; i < j; i++){
if(!this.todos[i].done){
count++;
}
}
return count;
}
},
methods: {
add: function(){
this.todos.push({
task: this.newTask,
done: false
});
newTask = ''
},
del: function(index){
if (confirm("are you sure?")){
this.todos.splice(index, 1);
}
},
purge: function(){
var i = this.todos.length;
while (i--){
if(this.todos[i].done){
this.todos.splice(i, 1);
}
}
}
}
});
</script>
</body>
</html>