【vue】 メソッドの書き方と呼び出す方法
vueにはメソッド(関数)を設定できます。設定したメソッドは、vueのスクリプトからだけでなく、HTML側にクリック時の挙動などでも呼び出す設定を作ることができます。
目次
メソッドの宣言
createApp
に入れる情報として、methods
を追加します。
const app = Vue.createApp({ data() { return { value: 0, } }, methods: { addValue(d) { this.value += d; }, } });
methods
が追加されています。ここに使えるようにしたいメソッドを書いていきます。ここに宣言したものは、スクリプト内だけでなく、HTML側で利用でも利用できます。
methods
内のメソッドでdata
に入れた値を用いる際は、this.値の名前
で利用できます。同様に、this.メソッド名()
でメソッドを呼び出すこともできます。
methods
は連想配列で、そこに複数のメソッドを設定することができます。ここではキー名の省略記法を利用しています。
つまり、上のaddValue(d) {...}
は、addValue: function(d) {...}
と同等です。
アロー関数はthis
の挙動の違いで不都合が出るので、addValue: (d) => {...}
という書き方はしないようにしましょう。
メソッドを呼び出す
HTMLから呼び出す
HTMLから呼び出す際は、@click
など、イベントが発生したときに呼び出すのが多いと思います。
<button @click="addValue(5)">増やす</button>
@click
は、クリックしたときに動作させたい内容を書きます。ここではmethods
に入れたaddValue
を利用したいのでその名前を入れます。
@click
は、v-on:click
の略です。そのため、<button v-on:click="addValue(5)">増やす</button>
としても動作します。
これらのイベントハンドラは、ネイティブのイベントを一通り利用できます。 詳しくは下の記事にあります。
this.addValue(5)
とする必要はありません。this
は不要です。もっというと、HTML側でVueのdata
やmethods
などの値を使うときはthis
は全部不要です。
実際に動作させてみましょう。
See the Pen vue1 method1 by Totori (@souki202) on CodePen.
クリックすると増えるボタンが完成しました!
引数にdataの値を使う
const app = Vue.createApp({ data() { return { value: 0, d: 10, } }, // ... });
だったとして、d
をaddValue
の実引数にしたい場合、次のように書きます。
<button v-on:click="addValue(d)">増やす!!</button>
引数にdが入っていますね。this
は不要なので注意しましょう。
実際に動かしてみます。
See the Pen by Totori (@souki202) on CodePen.
10ずつ増えました!
引数がない場合
引数がない場合、()
は不要です。
<button @click="addValue">増やす!!</button>
つまり、関数本体を渡すと、()
を書かなくても引数なしで実行してくれるということです。
メソッド内でメソッドを呼び出す
値はthis.value
のように、data
の値の名前にthis
を付けて利用しました。メソッドも同様にthis
でアクセスできます。
const app = Vue.createApp({ // ... methods: { addValue(d) { this.value += d; // 呼び出し this.adjustment(); }, adjustment() { if (this.value < 0) { this.value = 0; } } } });
value:100
、d:-10
にしてチェックしてみましょう。
See the Pen vue1 method3 by Totori (@souki202) on CodePen.
0より小さくならないようになりました。しっかりメソッドを呼び出せています!
もちろん、methods
外からメソッドを呼び出すこともできます。
メソッド呼び出し結果を表示する
{{ }}
内に関数呼び出しをする形で書くと表示されます。
See the Pen vue1 method4 by Totori (@souki202) on CodePen.
しかし、このような形でメソッドを呼び出して描画することはあまりしません。後の章で紹介するcomputed
のほうが適している場合がほとんどであるためです。
mounted
vueのマウント直後に一度だけ実行される処理を書きたい場合、mounted
に処理を書きます。
mounted
は、data
の実行後で、methods
などが用意された後に実行されます。
マウントは、app.mount("#app");
のようにしている場所です。
const app = Vue.createApp({ data() { return { a: 10, b: 20 } }, // data()の実行後に実行される mounted() { this.a = 300; this.f(); }, methods: { f() { this.b = 500; } } });
mounted() {...}
が追加されました。上のdata
と同様に関数そのものを設定します。mounted()
はdata()
の実行後に処理されるという点を意識しましょう。
挙動を見てみましょう。
See the Pen vue1 mounted by Totori (@souki202) on CodePen.
最初に入れた10
と20
は最初から上書きされていることがわかります。
まとめ
HTMLからメソッドを呼び出すには、普段のJavascriptを書く感覚で普通に関数呼び出しを書くだけです。
また、HTMLから呼び出す場合はthis
が不要で、vue内から呼び出す場合はthis
が必要であることに注意する必要があります。
同様にロジックを走らせるcomputed
とwatch
についても後で確認してみましょう。