Ownedmedia ウェブ制作に役立つコンテンツを発信中!

Vue.js 2020.08.27

配列処理とv-modelを使ったシンプルなToDoリストでVue.jsの基本を学ぶ

Tags: ,,

JavaScriptのフレームワークとして人気のVue.jsですが、JavaScriptの初学者が導入しようと思うとjQueryと比べても少しハードルが高いと感じる人もいるのではないでしょうか。ただ、うまく使うことでちょっとしたアプリケーションも簡単に作成することができるのもVue.jsの魅力です。今回はVue.jsの基本的な部分をToDoリストを作成していく中で学んでみたいと思います。今回は主に2つのキーワードがあります。それは「配列処理」と「v-model」です。どちらもVue.jsを使う上では重要な知識でもあり、実務でも使う場面が多々ありますので、ぜひどちらも覚えておきたいですね。

 

それでは早速作成してみたいと思います。まずはJavaScriptでVue.jsのコードを書いていきます。今回はVue.jsのライブラリをCDNなどで読み込む形での前提となります。その場合には新たにVueインスタンスを作成し、対象となる要素を指定するところまで進めてみます。

【JavaScript(Vue)】

const vueModel = new Vue({
  el: '#app',
  data: {
    newTask: '',
    tasks: [],
    isError: false
  },
  methods: {
    addTask() {
      if (this.newTask !== '') {
        this.tasks.push(this.newTask);
        this.newTask = '';
        this.isError = false;
      } else {
        this.isError = true;
      }
    },
    removeTask(index) {
      this.tasks.splice(index, 1);
    }
  }
});

 

続いてdataオプションとmethodsオプションに追記していきます。今回はToDoリストの作成ということでそれぞれ下記のようなイメージをしておくとわかりやすいですね。

dataオプション アプリケーションで扱う値→追加タスク、登録済みタスク、エラーの有無
methodsオプション アプリケーションで扱う処理→タスクの追加、タスクの削除

 

dataはVue.jsの中で扱う変数の集合になります。ToDoリストの要件の中で必要となる情報を保持できるようにします。今回の場合にはタスクの情報が扱うデータになります。そしてmethodsはVue.jsの中で実行する処理になりますので、タスクの追加や削除ができるように処理を追加していきます。上記では、追加タスクは1つしかないので文字列で、登録済みタスクは複数存在できるようにするので配列で、エラーの有無は2択しかないのでbooleanの値をデフォルトで設定しておきます。

 

そしてもう1点重要なものがあります。それは配列操作のメソッドです。今回はタスクの追加と削除を配列操作で行います。具体的にどういった形で処理が必要かを理解した上で、最適なメソッドを選択できるようにしておくことが重要です。今回は下記のような配列メソッドを採用しました。

タスクの追加:配列に値を追加する→Array.push(value);
タスクの削除:配列にある特定の値を削除する→Array.splice(index, count);

 

配列処理についてはこちらの記事「JavaScriptで配列を扱う時によく使うメソッド#6【配列の値を追加・削除する】」「JavaScriptで配列を扱う時によく使うメソッド#7【配列の値を切り取る・値を差し替える・配列を合体する】」もぜひ参考にしてみてください。

 

続いてHTMLを見ていきます。今回はPugで記述しているのでわかりにくいかもしれませんが、大きくはタスクの入力と表示という2つのエリアを用意しています。入力エリアにはタスクの名前を登録できるインプット要素を、表示エリアには、タスク名と削除ボタンをループ処理で表示させていきます。

【Pug】※一部抜粋

div#app
  div.input
    input(type="text" placeholder="タスクを入力" v-model="newTask")
    button(@click="addTask()").
      タスクを追加
    span(v-if="isError").error.
      ※タスクが空欄です
div.output
  ul.task-list
    li(v-for="(task, index) in tasks" :key="index" class="task-item")
      button(@click="removeTask(index)").
        完了
      span.
        {{ task }}

 

jQueryなどではDOMの操作をするためにid属性なんかをたくさん使っていましたが、Vue.jsの場合にはメソッドをテンプレート上に直接指定できるのでDOM を操作することは少なくなります。またここではもう一つ重要な機能である「v-model」を理解しておく必要があります。v-modelはinputなどのフォーム要素の入力した値とdataを紐づける機能で、フォームの値を簡単に変数として扱うことができます。

 

双方向バインディングと呼ばれる特性で、入力値に変更があればすぐに変数側の値も更新されます。ToDoリストであれば、入力したタスク名がそのまま変数に格納できるので、すぐに一覧表示が可能となっています。もちろん削除するときも変数内の配列の値ごと削除するので、内容に応じたHTMLが展開させることができます。あとはそれぞれmethodsで定義した、タスク追加と削除の処理をHTML上でイベントによって呼び出せるようにしておきます。

 

最後はCSSです、これに関しては適宜デザインに合わせて調整するようにしましょう。特段変わったことはないかと思います。タスクの削除時にアニメーションを入れるなどしても面白いかもしれませんね。

【Sass(SASS)】※一部抜粋

.input
  display: flex
  align-items: center
  flex-wrap: wrap
  padding: 16px
  input[type="text"]
    padding: 8px
    margin: 0 8px 0 0
    min-width: 160px
  button
    padding: 5px
    margin: 0 8px 0 0
  .error
    font-weight: bold
    color: red
.output
  padding: 0 16px
  li
    padding: 16px 0
    border-top: 1px solid #ddd
    span
      padding: 0 0 0 8px

 

これでVue.jsを使ったとてもシンプルなToDoリストアプリが出来上がりました。今回作成したサンプルはこちらになります。よければご参考に。

 

See the Pen
todolist_on_vue
by designsupply (@designsupply)
on CodePen.

 


 

Vue.jsでは様々な便利機能が用意されていますが、初めて学ぼうとなると少し大変かもしれませんが、今回のようなToDoリストを作成するといったわかりやすいテーマがあれば、理解も早まるのではないでしょうか。まだそんなに勉強したことが無いという方はぜひ今回紹介しているような簡単なアプリケーションを作成してみてもいいかもしれませんね。

この記事を書いた人

オガワ シンヤ

DesignSupply.代表 / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はチョコレートが欠かせない三十路Webクリエイター。

  • Twitter

コメントフォーム

記事に関するご質問やご意見などありましたら下記のコメントフォームよりお気軽に投稿ください。なおメールアドレスは公開されませんのでご安心ください。

内容に問題なければ、お名前・ハンドルネームとメールアドレスを入力いただき、下記の「コメントを送信」ボタンを押してください。

CAPTCHA


この記事もよく読まれています

Scroll to Top
ご質問・ご相談はありませんか ?