【学習メモ】動かして学ぶ!Vue.js 開発入門 その9
Chapter11 ToDoリストを作ってみよう
<div id="app">
<!-- ToDoリスト -->
<div v-for="todo in todos">
<label>
<input type="checkbox" v-model="todo.done">
<span v-bind:class="{donestyle:todo.done}">{{ todo.text }}</span>
</label>
</div>
<input type="text" v-model.trim="addtext" v-on:keyup.enter="addToDo" placeholder="すること">
<p><button v-on:click="cleanToDo">処理済みを削除</button></p>
<p>{{ remaining }} / {{ todos.length }}件処理</p>
</div>
new Vue({
el: "#app",
data: {
addtext: '',
todos: [
{
done: false,
text: 'パンを買う'
},
{
done: false,
text: 'コーヒーを買う'
}
]
},
computed: {
// `todo` 配列から `filter` メソッドで `done` の値が `true` のものだけ取り出してその個数を返す
remaining: function () {
return this.todos.filter(function (val) {
return val.done;
}).length;
}
},
methods: {
// `done` の値を `false` にして、textに `this.addtext` を設定したオブジェクトを、`this.todos` 配列に追加
addToDo: function () {
if (this.addtext) {
this.todos.push({
done: false,
text: this.addtext
});
this.addtext = '追加しました'; // 追加したら input要素を空にするために `this.addtext` を空にする
}
},
// `this.todo` の `done` が `false` だけのものが残るようにフィルターをかけて、`this.todos` に入れ直します。
cleanToDo: function () {
this.todos = this.todos.filter(function (val) {
return val.done == false;
})
}
}
});
/* ToDoリスト */
.donestyle {
text-decoration: line-through;
color: lightgray;
}
結果
