Vue.jsの基本5(ここまでのまとめ)

目次

本項ではVue.js v.2について扱います。
Vue.js v.2 日本語ドキュメント
https://jp.vuejs.org/v2/guide/

1.Vueの動作環境
(1)動作環境
 ・Windows 10 Pro
 ・XAMPP Control Panel v3.2.4
(2)Vueの導入
 Vueは下記のcdnからコードを読み込んで使用します。
・開発版(コンソールへの警告文が含まれている)<script src=”https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js”></script>

・本番版(サイズと高速化のため最適化されている)<script src=”https://cdn.jsdelivr.net/npm/vue@2.6.14″></script>

(3)動作確認方法
 Webサーバ(XAMPP)のドキュメントルート(”C:/xampp/htdocs”)にindex.html、javascript(.js)などのファイルを置き、XAMPPのApacheを起動してブラウザ(http://localhost)で確認します。

2.Vuejsの機能を含んだサンプルプログラム
下記のサンプルでは、Vuejsの機能として、
・イベントハンドリング(v-on:click)
・条件付きレンダリング(v-if)
・双方向バインディング(v-model)
・リストレンダリング(v-for)
・スタイルのバインディング(v-bind:style)
・クラスのバインディング(v-bind:class)
・コンポーネント( props、$emit(‘カスタムイベント’))
について動作を確認しました。

3.サンプルプログラムの概要

4.サンプルプログラム

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>Vue.js App</title>
  <style>
    .class-a{color:green}
  </style>
  
</head>
<body>
  <div id="app">
    <p>■イベントハンドリングの例</p>
    <input
      type="button" value="push" @click="increment" />
    <p>{{count}}</p>
    <p>■条件付きレンダリング</p>
    <p v-if="count >=5">5回以上押下</p>
    <p v-else>5回未満</p>
    <p>■双方向バインディング</p>
    <input v-model="name" type="text" name="name"/>
    <p>入力したテキスト:{{name}}</p>
    <p>■リストレンダリング</p>
    <ul>
      <li v-for="(item,i) in member"
          v-bind:key='i'
      >{{item}}</li>
    </ul>
    <p>■スタイルのバインディング</p>
    <div v-bind:style="styleSample">
      <p>文字色:{{color}}</p>
    </div>
    <p>■クラスのバインディング(直接オブジェクトで指定)</p>
    <div v-bind:class="{'class-a':classA}">クラスのバインディング</div>
    <p>■クラスのバインディング(dataのオブジェクトで指定)</p>
    <div v-bind:class="classObj">クラスのバインディング</div>
    <p>■コンポーネント 選択したコンポーネントでメッセージが変わります</p>
    <p>メッセージ:{{title}}</p>
    <p v-on:click="onSelectroot">選択:Rootコンポーネント</p>
	<t-component
	   v-bind:componame="componame"
	   v-on:clicktitle="onSelectcompo()"
    ></t-component>
  </div>
  
  <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
  <script src="main.js"></script>
</body>
</html>

・v-forの使い方
Vueインスタンスのデータを使ってレンダリングする。変数1、変数2はv-forの中でだけ使われる。
(1)データが配列のとき
<タグ名 v-for=”(変数1、変数2) in 配列の変数”>・・・<タグ名>
変数1には配列の要素、変数2には配列のindexが入る。
このindexをv-bind:key=”変数2”でkey属性に指定するようにする。

(2)データがオブジェクトのとき
<タグ名 v-for=”(変数1、変数2、変数3) in オブジェクト名”>・・・<タグ名>
オブジェクトを{プロパティ名:値}とすると、
変数1には値、変数2にはプロパティ名、変数3にはindexが入る。

(3)データがオブジェクトの配列のとき
<タグ名 v-for=”(変数1、変数2、変数3) in 配列の変数”>・・・<タグ名>
オブジェクトを[{プロパティ名:値},{プロパティ名:値},・・・]とすると、変数1には配列の要素(オブジェクト)、変数2には配列のindexが入る。
このindexをv-bind:key=”変数2”でkey属性に指定するようにする。
オブジェクト内のプロパティは、「変数名.プロパティ名」の書式でアクセスする。

main.js

//Vueインスタンス生成の前にコンポーネント定義を先に書かないと"ReferenceError"になる
const tComponent = Vue.component('t-component',{
  //親から受け取るデータを設定
  props: {
     componame: {
       type: String,
       default:""
     }
    },
 
  //親へのイベント通知の書き方
  //$emit(イベント名,[親コンポーネントに渡すデータ]):
  template: `
    <div
      class="title-box"
      v-on:click="$emit('clicktitle')"
    >選択:{{componame}}</div>`
});

//Vueインスタンスの作成
var app = new Vue({
  //Vueインスタンスを結びつけるHTML要素を指定
  el: '#app',
  //使用するコンポーネントの登録
  component:{
    't-component':tComponent,
  },
  //Vuejsで扱うデータを入れておくところを定義
  data:function(){  //Vuejsで扱うデータを入れておくところ
    return{         //データはオブジェクトを返す関数として定義(※1)
      title:"Hello", //①
      componame:"tComponent",
      name:"name",  //④
      count:0,  //③
      //message:"Hello Vuejs",
      member:['cat','dog','bard'],  //⑤
      color:'#f00',  //⑥
      classA:true,  //⑦
      classObj:{
        'class-a':true
      },
    };
  },
  //算出プロパティの定義
  computed:{
    styleSample(){  //⑥
     return `color:${this.color}`
    }
  },
  //メソッドの定義
  methods:{
    increment(){      //②
      this.count++;
    },
    onSelectcompo() {  //⑧カスタムイベントで実行するメソッド
      this.title="子コンポーネントの要素が選択されました";
    },
    onSelectroot() {  
      this.title="Rootコンポーネントの要素が選択されました";
    }
  }
});

5.ブラウザで表示例
・イベントハンドリング(v-on:click)
・条件付きレンダリング(v-if)

・双方向バインディング(v-model)

・リストレンダリング(v-for)

・スタイルのバインディング(v-bind:style)

・クラスのバインディング(v-bind:class)

・コンポーネント( props、$emit(‘カスタムイベント’))

The end