序章

この記事では、Vue.jsの動的スタイルとクラスバインディングについて学習します。 とともに v-bind:style ディレクティブでは、クリックイベントでフォントサイズを視覚化します。 と v-bind:class、要素に複数のクラスを適用する方法を観察します。

これはDOM操作で可能ですが、Vue.jsを使用すると、簡潔なコード行でスタイリングとクラスの両方を動的にレンダリングでき、そのデータモデル構造を利用できます。

スタイルを動的にバインドする

ユーザー入力に基づいてフォントサイズを増減する方法をVue.jsで開発しましょう。 この目的のために、Vueは私たちに v-bind:style 指令。

あなたの中で App.js ファイル、Vueインスタンスをインスタンス化し、データモデルを含めます。

App.js
data() {
  return {
    fontSize: 10
  }
}

に2つのボタンを作成します index.html ファイル、およびを取り込むパラグラフ v-bind:style 指令:

index.html
<button v-on:click="fontSize++">
  Increase font size
</button>
<button v-on:click="fontSize--">
  Decrease font size
</button>

<p v-bind:style="{ fontSize: fontSize + 'px' }">
  Font size is: {{ fontSize }}
</p>

クリックイベントごとに、 v-bind:style ディレクティブは、の値をインクリメントおよびデクリメントします fontSize 変数。 これにより、 fontSize CSSに font-size 財産。

必要に応じて、複数のスタイルオブジェクトをに追加します v-bind:style 指令。 あなたの中で App.js ファイルには、次のようにスタイルオブジェクトを含めます。

App.js
data() {
  return {
      baseStyles: {
      fontWeight:'800',
      color: 'red'
    },
      overrideStyles: {
      color:'blue'
    } 
  }
}

あなたの中で index.html ファイル、スタイルオブジェクトの配列を提供します。

index.html
<p v-bind:style="[baseStyles, overrideStyles]">
  baseStyles and overrideStyles
</p>

注:次の要素のロジックは前の要素をオーバーライドするため、配列内のスタイルオブジェクトの順序に注意してください。

スタイルバインディングを確認したので、Vue.jsの動的クラスについて考えてみましょう。

クラスを動的にバインドする

要件の変化に応じて、スタイルを直接適用すると複雑になる可能性があります。 これを支援するために、 v-bind:class ディレクティブは、クラスを要素内のコンテンツにバインドする方法を提供します。

たとえば、要素のテキストに下線を付け、色とフォントの太さを変更する必要がある場合があります。

これはスタイルバインディングを使用して実装できますが、Vue.jsを使用すると、 v-bind:class 指令。

これを実現するには、次の配列を作成します menuItemsselected デフォルト値が 'Home' あなたの中で App.js ファイル:

App.js
data() {
  return {
    selected: 'Home',
    menuItems: ['Home', 'About', 'Contact']
  }
}

あなたの中で index.html ファイル、適用 v-for 順序付きリスト内でループして、 menuItems 配列。

クリックイベントごとに、 v-bind:class ディレクティブは、の値を割り当てます selected の現在の要素に対する変数 menuItems. これにより、いくつかのクラスを順序付きリスト要素に渡すことができ、CSSにリストされているスタイルを追加できます。

index.html
<ul>
  <li v-for="item in menuItems"
    v-on:click="selected = item"
    v-bind:class="{ selected: selected == item}">
      {{item}}
  </li>
</ul>

を使用して、配列内の複数のクラスを渡すこともできます。 v-bind:class 指令。

内のデータモデルでクラスの配列を定義します App.js ファイル:

Apps.js
data() {
  return {
    classArray: ['selected', 'underlined']
  }
}

あなたの中で index.html ファイル、あなたを参照してください classArray を使用して v-bind:class 指令。

index.html
<p v-bind:class="[classArray]">
  Multiple classes {{ classArray }}
</p>

これは両方に適用されます selected そしてその underlined 要素へのクラス。

結論

Vue.jsスタイルおよびクラスディレクティブを使用すると、要素内で動的なアクションが維持され、より強力なパフォーマンスのために複数のインスタンスがサポートされます。