はじめに
Electron+Vue.jsでTodoアプリで入力された内容をズラズラっと表示するだけのTodoアプリを作りました。でもこれでは完了か未完了かが分からず、Todoリストとしての体裁を成していません。
今回は、チェックを付けられるようにして完了済みか未完了かを区別できるようにしてみます。
マイペースでやらないと頭が追いつかんのですよ。
リストの列を増やす
今はリスト上にはタスクを表示するための列が1つだけ存在する状態です。
ここにリストにチェックをするための列を追加します。
// すでに存在するel-table-columnタグの前に入れる
<el-table-column label="button" width="50">
<el-button size="mini" icon="el-icon-check">
</el-button>
</el-table-column>
これで見かけ上はTodoリストっぽくなりました。
完了済みにする処理を書く
ここですること
続いて、完了済みのチェックをクリックしたときの処理を書いていきます。
script
のmethods
を修正します。
ここですることは、
- 各タスクに完了/未完了の情報を持たせる
- タスク完了の処理を書く
の2点です。
各タスクに完了/未完了の情報を持たせる
タスクを追加するときに、フラグを持たせてしまいましょう。
insertTask () {
this.taskList.push({task: this.input, isComplete: false})
}
配列taskList
に保存するJSONデータにisComplete
フィールドを追加しました。これがfalse
ならば未完了、true
なら完了です。
タスク完了の処理を書く
先ほど追加したisComplete
フィールドの値をtrue
にする処理を書いていきます。
completeTask (targetTask) {
this.taskList[targetTask].isComplete = true
}
どのタスクを完了にするかを判別するために引数targetTask
を渡しています。そして、その引数に該当するデータのisComplete
をtrue
にします。
今は配列とリスト表示の順序が一致しているので、実際に渡されるものはチェックがクリックされたリストの行数にしましょうかね。
ソートや絞り込みなどを行うならば、この方法は利用できません。別途タスクID等で完了済みにしたいタスクの特定を行う必要があります。
処理を書いたので、チェックをクリックしたときに呼び出されるようにしましょう。
<el-table-column label="button" width="50">
<template slot-scope="record">
<el-button size="mini" icon="el-icon-check" circle @click="completeTask(record.$index)">
</el-button>
</template>
</el-table-column>
@click
でさっき作ったメソッドを呼び出しています。
引数にはクリックされた行の行数を渡しています。$index
で行数を渡すことができます。また、行を特定するには<template slot-scope="record">
で可能です。
チェックされたことを確認できるようにする
はい。
例によって例のごとく、内々で処理が終わってしまうので、見た目が全く変わりません。これでは、本当に処理ができているのかがさっぱりわかりません。
実行時のコンソールでエラーが出ていないので、おそらく大丈夫でしょうレベル。
目で見て確認できるようにするため、タスク名に取り消し線でも付けてみましょう。
style
にCSSを書いておきます。
.complete {
text-decoration: line-through;
}
.incomplete {
}
そして、各タスクのisComplete
の値に応じてCSSを適用しましょう。
<el-table-column prop="task" label="task" width=auto>
<template slot-scope="record">
<span :class="[record.row.isComplete === true ? 'complete' : 'incomplete']">
{{ record.row.task }}
</span>
</template>
</el-table-column>
値を参照して表示するには{{ }}
で囲みます。
ここでは、配列taskList
の中身を順次リスト表示したものからtask
フィールドの値を表示しています。
また、isComplete
フィールドの値を参照し、true
ならばCSSのcomplete
を適用するようにしています。false
のときはincomplete
です。
タスク追加したときに取り消し線が入るとダメですからね。
対で入れています。
取り消し線は出るかな?
良い感じです。
それにしても3項演算子って便利ですね。
今回はここまで
Todoリストっぽくなってきました。ですが、データの保存がされません。アプリを立ち上げる度にTodoがリセットされてしまいます。
このままでは使い物になりません。
次回はタスクデータの永続化に挑戦です。