Vue でボタンをクリックした時の処理
Vue 公式チュートリアルのステップ4です。このステップでは、Web ブラウザ上に作成した「ボタン」をクリックした時の処理を学習します。
前回までのポイントをもう一度
例によって最初は、前回までの復習です。 前回までに、Vue の「部品」を記述するファイル「.vue」は、HTML・CSS・Javascript の記述を書く部分に分かれています。
* HTML は、「template」のタグの部分に記述します。
* CSS は、「style」のタグの部分に記述します。
* Javascript は、「script」のタグの部分に記述します。
Vue では、この三つの部分をうまく連携させて、色々な機能を実現しています。 特に、HTML の部分は、標準の HTML の書き方とは、若干違う部分もあるので、その辺りを意識しながら、Vue 独自の書き方をマスターする必要があります。
これまでは、この三つの基本部分を使った例と、簡単な連携を学習してきました。
今回学ぶのは?
今回は、HTML と Javascript の連携で、新たに「ボタン」を使った事例を学習します。 ボタンをクリックする度にボタンに表示されている数字を1づつ増やして表示をするという機能を実現します。
以下のコードが変更を加える前のコードです。
<script>
export default {
data() {
return {
count: 0,
};
},
};
</script>
<template>
<!-- make this button work -->
<button>count is: {{ count }}</button>
</template>
ポイントは二つです
* Javascript で「count」という変数を作っています。初期値は「0」です。
* HTML の記述でボタンを作っています。
ボタンの記述は、
<button>count is : {{ count }}</button>
のように書きます。「button」のタグに囲まれた部分がボタンに表示される文字になります。 中括弧二つで囲まれた部分に、「count」が入っているので、Javascript の変数の値が表示されます。
課題は、ボタンをクリックした時に、ボタンに表示されている文字の数字を1づつ増やすようにします。
変更を加えるポイントは?
このステップの課題の変更は、
* ボタンがクリックされたイベントを処理するメソッド(関数)を作る
* ボタンのクリックのイベントで処理を行うメソッドを呼び出す
この二つになります。
最初に、ボタンのクリックのインベントの検出と、処理の呼び出しは、HTML の記述に書きます。
<template>
<button @click="increment">count is : {{ count }}</button>
</template>
「@click="呼び出すメソッド名(関数名)"」の記述をボタンの HTML の記述に追加します。
次に、ここで呼び出しているメソッド(関数)を作ります。
<script>
export default {
data() {
return {
count: 0,
};
},
methods: {
increment() {
this.count++;
},
},
};
</script>
Vue で利用するメソッド(関数)の記述は、「export default {}」の中に、「methods」というタグをつけて、その中に記述します。ここでは、「increment()」という名前で、変数「count」を1増やす記述「this.count++」を加えれば完了です。
ここで「this」という記述が変数の前についていますが、これは、Vue では、「export default {}」の中で宣言した変数を使うときは「this」をつけるという決まりになっています。理由は、「script」タグの中では、「export default {}」の外側でも変数を作る事ができますが、この変数と区別するためです。
ここが少しわかりにくいと多いますが、基本は、
*「export default {}」の内側で、「export default{}」の内側で作った変数や、メソッドを使う場合には、前に「this」をつけると覚えてください。
* HTML の部分(「template」のタグの中)で使う場合には、「this」は不要です。
きちんと、説明する事もできますが、オブジェクト志向のプログラミングで使う「クラス(class)」の概念を学習してからでないと、理解するのは難しいと思いますので、現段階では、「このように記述する」と覚えてください。
変更を加えた後のコードは以下のようになります。
<script>
export default {
data() {
return {
count: 0,
};
},
methods: {
increment() {
this.count++;
},
},
};
</script>
<template>
<button @click="increment">count is: {{ count }}</button>
</template>
今回の応用編は?
今回の課題は、ボタンを押すと、ボタンの数字が1づつ増えるという機能を実現するものでした。 応用編として、次の変更を考えてみてください。
* ボタンではなく、「h1」のタグで、「count」の値を表示するように HTML を変更してみてください
* ボタンを追加して、追加したボタンの表示の文字を「+」にしてください
* もう一つボタンを追加して、ボタンの表示の文字を「ー」にしてください。
* 「+」のボタンがクリックされたら、「count」の値を1増やす処理(increment)を呼び出すようにしてください。
* 「ー」のボタンがクリックされたら、「count」の値を1減らす処理(decrement)を呼び出すようにしてください。
* メソッド(関数)「decrement()」を作ってください。
少し難しいかもしれませんが、挑戦してみてください。
答えはこちらになります
<script>
export default {
data() {
return {
count: 0
}
},
methods: {
increment() {
this.count++
},
decrement() {
this.count--
}
}
}
</script>
<template>
<h1>count is: {{ count }}</h1>
<button @click="increment">+</button>
<button @click="decrement">-</button>
</template>
まとめ
このステップでは、少しプログラミングらしい課題になりました。
学習した内容をまとめると:
イベントに対応した処理を行うメソッド(関数)は、「export defautl {}」の中に、「methods:{}」という部分を作ってその中に記述します。
「export default {}」の中で作った変数やメソッド(関数)に内部からアクセスする場合は、先頭に「this」をつけます
「export defautl {}」の中で作った変数やメソッド(関数)に HTML からアクセスする場合は、「this」はつけません。
ボタンを押したイベントの呼び出しは、「@click="呼び出すメソッド(関数)名"」で呼び出します
以上です。
まとめてしまうと簡単そうに見えますが、実際に使いこなせるようになるには、このプログラムを自分で色々変更してみて、実際に表示や動作がどのように変わるかを「目で見て」体験する必要があります。
時間をかけて、遊んでみるのが習得の近道です。
次回は 2022 年 2 月 21 日にお届けします。それまでに、これまでの四つのステップをよく復習しておいてください!