ディレクティブとは
Vue.jsでは、HTMLに対して独自の属性を追加することでDOM操作を行うことができます。
この独自の属性のことをディレクティブと呼んでいます。
ディレクティブ名は全てv-
から始まります。
主要なディレクティブ
v-ifとv-show
要素の表示と非表示を切り替えたい場合、v-if
もしくはv-show
を使います。
どちらも属性値が真の場合は要素を表示し、偽の場合は非表示にします。
<p v-if=”値”>
</p>
<p v-show=”値”>
</p>
どちらも表示と非表示を切り替えることができますが、その実現方法が異なります。
属性値の判定結果に応じて、v-if
はDOM要素の追加と削除、v-show
はdisplayプロパティの値の変更によって実現しています。
一般的にスタイルの変更よりもDOM要素の操作のほうがレンダリングコストが高くなります。
そのため属性値の判定結果が頻繁に変わる場合はv-show
、ほぼ変わらない場合はv-if
、というように使い分けます。
v-for
v-forで、配列もしくはオブジェクトのデータをリストレンダリングできます。
属性値は変数名 in 配列
という構文が使われます。
<li v-for="変数名 in 配列">
</li>
配列のindexが必要な場合、(変数名, index) in 配列
と記述できます。
v-on
v-on
はchangeやinputなどのイベントが起きた時に、属性値の式を実行します。
DOM APIのaddEventListenerのようなものです。
<input v-on:イベント名=”実行したい式”>
v-on
はよく使われるため、以下のように省略して記述できます。
v-on:change → @change
v-model
v-model
は双方向データバインディングを実現するディレクティブです。
DOMで変更があった時、その値をVueインスタンスのデータとして更新します。
逆にVueインスタンスのデータに変更があった時、DOMを更新します。
<input v-model=”値”>
v-model
を使用できるのは、inputタグ、selectタグ、textareaタグです。
ユーザーが入力した内容を、値として保持できるようになります。
v-bind
v-bind
はHTML要素の属性に、特定のデータを渡す際に利用できます。(データバインディング)
<p v-bind:属性名=”値”>
</p>
例えばclass属性をバインディングして、特定の条件の時にclassを付与する、といった使い方ができます。
v-on
同様、よく使われるため以下のように省略して記述できます。
v-bind:class → :class
終わりに
本記事で紹介したディレクティブの使用例を作成しました。
参考文献