Vue.js　超入門

## はじめに

こんにちは、kakutekiと申します。初投稿です。
今回は、森　巧尚さんの書かれた[「動かして学ぶ！ Vue.js 開発入門」](https://www.amazon.co.jp/%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E5%AD%A6%E3%81%B6%EF%BC%81Vue-js%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-%E6%A3%AE%E5%B7%A7%E5%B0%9A-ebook/dp/B07KPTGZ4C)でVue.jsを勉強したのでまとめておきたいと思います。
サンプルプログラムは配布できませんので自分で作成したものを書いていきたいと思います。

## vue.jsとは


JavaScriptのライブラリの1つでシンプルで、とても分かりやすく簡単です。

## 最低構成

vue.jsを動かす為には以下のコードが最小構成になります。

 ```HTML:最小構成サンプル
<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Vue.js sample</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
</head>

<body>
  <h2>vue.js最小構成</h2>
  <div id="app">
    
  </div>

  <script>
    new Vue({
      el: "#app",
      data: {
        
      },
      methods: {
        
      },
      components: {
      },

    });
  </script>

</body>

</html>

 ```

## 部位ごとに解説

vue.jsを動かす為に今回は、CDNという方法でインポートします。
 ```HTML:
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
 ```

vue.jsで、いじるdivタグです。あとからvue.js側からタグを選択してあげます。
 ```HTML:
  <div id="app">
  </div>
 ```

ここがvue.jsの部分です！ここだけ下の方で細かく解説します。
 ```Javascript:
new Vue({
      el: "#app",
      data: {
        
      },
      methods: {
        
      },
      components: {

      },
      watch: {

      },

    });
 ```
##### vue.js部分を細かく解説

new Vueで新しいVueインスタンスを作成します。
 ```Javascript:
new Vue({
     
    });
 ```
いじる部分のタグを指定して呼び出します。今回はdivタグのappを指定して呼び出します。
 ```Javascript:
      el: "#app",
 ```
ここには、関数を定義します。
 ```Javascript:
      data: {
        
      },
 ```
ここには、処理を書きます。
 ```Javascript:
      methods: {
        
      },
 ```
ここでは、処理をコンポーネントとして関数化してmethodsから呼び出します。
 ```Javascript:
      components: {

      },
 ```

関数のデータの変化を監視します。
 ```Javascript:
      watch: {

      },
 ```


## 何はともあれ何か作ってみよう

今回はToDoリストアプリを作りました。下のコードをコピーしHTMLファイルにペーストし開いて見てください。
↓こんな感じになります。
![スクリーンショット 2022-03-06 141357.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632959/8e671ee5-e96c-497c-14d3-eaa04aad5c75.png)

 ```HTML:ToDoリストサンプル
<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Vue.js sample</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
</head>

<body>
  <h2>ToDoリスト</h2>
  <div id="app">
    <div v-for="todo in todos">
      <label>
        <input type="checkbox" v-model="todo.done" v-on:click="cleanToDo">
        <spen v-bind:class="{donestyle:todo.done}"> {{ todo.text }} </spen>
      </label>
    </div>

    <input type="text" 　v-model.trim="addtext" v-on:keyup.enter="addToDo" placeholder="ここにタスク入力">


    <p>あとタスクが {{ todos.length }} 個</p>

  </div>

  <script>
    new Vue({
      el: "#app",
      data: {
        addtext: "",
        todos: [{
            done: false,
            text: "パソコンを買う"
          },
          {
            done: false,
            text: "勉強する"
          },
        ]
      },
      methods: {
        addToDo: function() {
          if (this.addtext) {
            this.todos.push({
              done: false,
              text: this.addtext
            });
            this.addtext = "";
          }
        },
        cleanToDo: function() {
          this.todos = this.todos.filter(function(val) {
            return val.done == false;
          })
        }
      },
    })
  </script>

  <style>
  </style>
</body>

</html>
 ```

## どんな風に動作する？
↓　初期画面です。最低構成のToDoリストです
![スクリーンショット 2022-03-06 142414.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632959/5d68ed57-0e55-23d6-2c6b-826c704ba786.png)
↓　一番上のタスクを選択している状態です。
![スクリーンショット 2022-03-06 142438.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632959/9448c1f8-1ed1-6d45-1dbd-9ef0eb83c6f1.png)
↓　同じタスクもしくは、他のタスクをクリックすると削除されます
![スクリーンショット 2022-03-06 142503.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632959/07bf71bc-4522-d090-0f4b-24bb45bc1672.png)
↓　テキストボックスにタスクを入力します。
![スクリーンショット 2022-03-06 142548.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632959/ecfadd8c-0cfe-1117-c705-6ff3dec12e6d.png)
↓　テキストを打ち終えエンターを押すとタスクが追加されます。
![スクリーンショット 2022-03-06 142603.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632959/605a76a5-dd23-3737-5a80-0b8a5fcec7ae.png)


## どのような仕組み？

head部分です。script srcでDCNという方法でVue.jsを読み込んでいます。
 ```HTML:
<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Vue.js sample</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
</head>
 ```
ここからHTMLのbody部分です。todo.textという関数にタスクの文字データが入ります。
inputタグの部分ではエンターキーを押すとaddToDoコンポーネントが呼び出され書き込んだ文字データが関数に入ります。
 ```HTML:
<body>
  <h2>ToDoリスト</h2>
  <div id="app">
    <div v-for="todo in todos">
      <label>
        <input type="checkbox" v-model="todo.done" v-on:click="cleanToDo">
        <spen v-bind:class="{donestyle:todo.done}"> {{ todo.text }} </spen>
      </label>
    </div>

    <input type="text" 　v-model.trim="addtext" v-on:keyup.enter="addToDo" placeholder="ここにタスク入力">


    <p>あとタスクが {{ todos.length }} 個</p>

  </div>
 ```
ここからがVue.jsの部分です。Vue.jsはJavaScriptのライブラリですので、scriptタグで囲んであげます。
vue.jsの部分のみ細かく下で解説してます。
 ```javaScript:
  <script>
    new Vue({
      el: "#app",
      data: {
        addtext: "",
        todos: [{
            done: false,
            text: "パソコンを買う"
          },
          {
            done: false,
            text: "勉強する"
          },
        ]
      },
      methods: {
        addToDo: function() {
          if (this.addtext) {
            this.todos.push({
              done: false,
              text: this.addtext
            });
            this.addtext = "";
          }
        },
        cleanToDo: function() {
          this.todos = this.todos.filter(function(val) {
            return val.done == false;
          })
        }
      },
    })
  </script>
 ```
ここでHTMLの部分で定義した、appと付けたdivタグを呼び出します。
 ```javaScript:

      el: "#app",
 ```
ここでは関数定義を行いました。addtextはテキストボックスからの文字データを受け付ける関数です。後からtodosの配列にデータを入れます。
todosに表示するタスクを入れます。タスクの文字データとチェックボックスが選択されているかどうかを配列に入れます。
 ```javaScript:
      data: {
        addtext: "",
        todos: [{
            done: false,
            text: "パソコンを買う"
          },
          {
            done: false,
            text: "勉強する"
          },
        ]
      },
 ```
ここにはメソッドがあります。タスクを追加する「addToDoメソッド」とタスクを削除する「cleanToDoメソッド」の2つがあります。
「addToDoメソッド」ではif文で文字が入っているか確認し、文字が入っていると処理が始まります。if文の中ではaddTextという関数に入っている文字データを配列データに入れる処理を行います。
if文の処理にかかわらず="";で関数をリセットします。
 ```javaScript:
      methods: {
        addToDo: function() {
          if (this.addtext) {
            this.todos.push({
              done: false,
              text: this.addtext
            });
            this.addtext = "";
          }
        },
        cleanToDo: function() {
          this.todos = this.todos.filter(function(val) {
            return val.done == false;
          })
        }
      },
    })
 ```

## 最後に

今回はVue.jsについて記事を書かせて頂きました。私はC言語が一番慣れているのですが、JavaScriptぽさが消えC言語ぽいなと思いました。