これからはじめるVue.js

##はじめに
Vue.jsはオープンソースのJavaScriptフレームワークです。
[Vue.js公式サイト](https://jp.vuejs.org/)
日本語リファレンスがすごく豊富なので、変にググって調べるよりもこっちの方が勉強になると思います。

##特徴
データバインディングとは分離されたデータソースとユーザインタフェースの間を橋渡しする役割を果たしますが、ユーザインタフェースの変更または操作に応じてデータが変更されるのを**双方向データバインディング**と言います。
その双方向データバインディングに特化しているのがVue.jsです。
つまりhtmlとjs間で簡単にデータの橋渡しができるよーっていうイメージ。

##さっそく導入
```html
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
```
これを！！！htmlファイルにコピペするだけ！！！簡単！！！

npmでインストールする方法もありますが、軽く触るくらいならCDNでいいと思うので割愛します。

## やってみる
```
<div id="app"></div>
```
まずは、適当にdivタグを書いてidを指定します。
####Vueインスタンスの作成
```js
var vm = new Vue({
  // プロパティ
    el: '#app',
});
```
全ての Vue アプリケーション は、Vue 関数で新しい Vue インスタンスを作成することによって起動されます。
上記のコードだと、以下のプロパティはapp内に通用しますと言う意味になります。
ちなみにここでクラスを指定すると、そのクラス名がユニークである場合のみ動きます。複数指定したクラスには適用されないので注意。

####オプション/データ
```html:index.html
<html>
    <head>
        <link rel="stylesheet" href="css/index.css">
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    </head>

    <body>
        <div id="app">
            こんにちは、{{ name }}さん！
            <p>所持品</p>
            <li v-for="item in items">
                {{ item.name }}
            </li>
        </div>
        <script src="js/index.js"></script>
    </body>
</html>
```
```js:js/index.js
var app = new Vue({
    el: '#app',
    data: {
        name: '勇者',
        items: [
            { name: 'ポーション' },
            { name: 'どくけし' },
            { name: 'エーテル' },
        ]
    }
});
```
【出力結果】
<img width="260" alt="スクリーンショット 2018-09-19 19.03.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/246277/814caafc-146f-2b94-6e55-1c2b5d8e80a2.png">

...とこんな感じでデータをjsからhtmlに渡すことができます。

##ディレクティブ
上記のhtmlファイルの```<li>```タグに**v-for**とありますが、これはVue.jsのディレクティブといいhtmlタグに埋め込むことにより便利な機能が使えます。以下では、主なディレクティブを紹介したいと思います。

####v-text : 要素の中身のテキストを書き換える
```html
<div id="sample">
    <div v-text="hoge"></div>
    <div>HOGEHOGE</div>
</div>

<script>
  var vm = new Vue({
    el: '#sample',
    data: {
      hoge: 'HOGEHOGE',
    }
  });
</script>
```
#####結果
HOGEHOGE
HOGEHOGE

####v-for : 配列に要素をマッピングする
```html

<ul id="example-1">
  <li v-for="item in items">
    {{ item.message }}
  </li>
</ul>
<script>
var example1 = new Vue({
  el: '#example-1',
  data: {
    items: [
      { message: 'Foo' },
      { message: 'Bar' }
    ]
  }
})
</script>
```
#####結果
・Foo
・Bar

####v-show : 表示切り替えのトリガー
```html
<div v-show="foo">表示されます</div>
<div v-show="bar">表示されません</div>

<script>
var vm = new Vue({
    el: '#sample',
    data: {
      foo: true,
      bar: false,
    }
  });
</script>
```
#####結果
表示されます
####v-if : バインディングの値の真偽値に基いて要素の挿入や削除を行う
```html
<div v-if="foo">表示されます</div>
<div v-if="bar">表示されません</div>

<script>
var vm = new Vue({
    el: '#sample',
    data: {
      foo: true,
      bar: false,
    }
  });
</script>
```
#####結果
表示されます

####v-on : DOM イベントの購読、イベント発火時の JavaScript の実行が可能になる
```html
<div id="example-1">
  <button v-on:click="counter += 1">Add 1</button>
   <p>このボタンは {{ counter }} 回クリックされました。</p>
</div>

<script>
var example1 = new Vue({
  el: '#example-1',
  data: {
    counter: 0
  }
})
</script>
```
#####結果
<img width="311" alt="スクリーンショット 2018-09-25 18.51.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/246277/a9ddceb8-c35a-8057-0c96-2dc548520df9.png">

クリック回数が記録される機能が簡単に実装できました。

今回はこのあたりで。
ディレクティブに関しては本当にたくさん存在するので公式リファレンスを参考にするといいでしょう。
次回以降はもっと踏み込んだ内容について書いていきます。