目次
静的クラスと動的クラス
クラス名を動的に追加または削除するさまざまな方法を取り上げてきました。しかし、動的に生成されたクラス名自体はどうなるのでしょうか?
使用计算属性来简化类
ホームページ ウェブフロントエンド Vue.js Vueでクラス名を動的に追加する方法を詳しく解説

Vueでクラス名を動的に追加する方法を詳しく解説

Nov 03, 2020 pm 06:01 PM
vue

Vueでクラス名を動的に追加する方法を詳しく解説

動的なクラス名をコンポーネントに追加できることは、非常に強力な機能です。これにより、カスタム テーマを作成したり、コンポーネントの状態に基づいてクラスを追加したり、スタイルに依存するコンポーネントのさまざまなバリエーションを作成したりすることが容易になります。

動的クラス名の追加は、prop :class="classname" をコンポーネントに追加するのと同じくらい簡単です。 classname が何に評価されるかは、コンポーネントに追加されるクラス名になります。

もちろん、Vue の動的クラスを使用してできることはさらにたくさんあります。この記事では、次のことについて詳しく説明します。

  • Vue での静的クラスと動的クラスの使用
  • 正規の JS 式を使用してクラスを評価する方法
  • 配列構文動的クラス名の場合
  • オブジェクト構文
  • クラス名をすばやく生成する
  • カスタム コンポーネントで動的クラス名を使用する方法

静的クラスと動的クラス

Vue では、静的クラスと動的クラスをコンポーネントに追加できます。

静的クラスは決して変更されない退屈なクラスであり、コンポーネント内に常に存在します。一方、アプリケーションに動的クラスを追加したり削除したりすることもできます。

静的クラスの追加は、通常の HTML での追加とまったく同じです

<template>
  <span class="description">
    This is how you add static classes in Vue.
  </span>
</template>
ログイン後にコピー

動的クラスは非常に似ていますが、Vue の特別な属性構文 v-bind## を使用する必要があります#、JS 式をクラスにバインドするには:

<template>
  <span v-bind:class="&#39;description&#39;">
    This is how you add static classes in Vue.
  </span>
</template>
ログイン後にコピー

ここで、動的クラス名の前後に追加の引用符を追加する必要があることがわかります。

これは、

v-bind 構文が JS 値として渡すものをすべて受け入れるためです。引用符を追加すると、Vue がそれを文字列として扱うようになります。

Vue には、

v-bind:

<template>
  <span :class="&#39;description&#39;">
    This is how you add static classes in Vue.
  </span>
</template>
ログイン後にコピー

の短縮構文もあります。本当に素晴らしいのは、同じコンポーネント上に静的クラスと動的クラスの両方を含めることもできることです。静的クラスは、位置やレイアウトなど、変更されないとわかっているコンテンツに使用され、動的クラスはテーマなどに使用されます。

<template>
  <span    class="description"
    :class="theme"
  >
    This is how you add static classes in Vue.
  </span>
</template>

export default {
  data() {    return {
      theme: &#39;blue-theme&#39;,
    };
  }
};
----------------------------------------
.blue-theme {
  color: navy;
  background: white;
}
ログイン後にコピー

この場合、

theme がコンテンツです。クラス名の変数を適用します。

条件付きクラス名

v-bind は任意の JS 式を受け入れることができるため、これを使用して非常に優れた処理を行うことができます。私のお気に入りは、テンプレートで三項式を使用することです。これは非常にクリーンで読みやすい傾向があります。

<template>
  <span    class="description"
    :class="darkMode ? &#39;dark-theme&#39; : &#39;light-theme&#39;"
  >
    This is how you add dynamic classes in Vue.
  </span>
</template>
ログイン後にコピー

darkModetrue の場合、dark-theme がクラス名として使用されます。それ以外の場合は、ライトテーマを選択します。

配列構文を使用する

多くの異なるクラスを動的に追加する必要がある場合は、配列またはオブジェクトを使用できます。どちらのメソッドも便利です。最初に配列メソッドを見てみましょう。

ここでは JS 式を計算しているだけなので、学習した式を配列構文と組み合わせることができます

<template>
  <span    class="description"
    :class="[
      fontTheme,
      darkMode ? &#39;dark-theme&#39; : &#39;light-theme&#39;,
    ]"
  >
    This is how you add dynamic classes in Vue.
  </span>
</template>
ログイン後にコピー

配列を使用して、この要素名に 2 つの動的クラスを設定します。

fontTheme の値は、フォントの外観を変更するクラス名です。前の例では、darkMode 変数を使用して、dark-themelight-theme を切り替えることができます。

オブジェクト構文の使用

オブジェクトを使用して動的クラスのリストを定義することもできるため、柔軟性が高まります。

値が true のキーと値のペアの場合、そのキーをクラス名として使用します。オブジェクト構文の例を見てみましょう。

<template>
  <span    class="description"
    :class="{
      &#39;dark-theme&#39;: darkMode,
      &#39;light-theme&#39;: !darkMode,
    ]"
  >
    This is how you add dynamic classes in Vue.
  </span>
</template>
ログイン後にコピー

オブジェクトには、

dark-themelight-theme という 2 つのキーが含まれています。以前に実装したロジックと同様に、darkMode の値に基づいてこれらのテーマを切り替えたいと考えています。

darkModetrue の場合、dark-theme が動的クラス名として要素に適用されます。ただし、!darkMode 値が false であるため、light-them は適用されません。

これで、Vue コンポーネントにクラスを動的に追加する基本を説明しました。では、独自のカスタム コンポーネントを使用してこれを行うにはどうすればよいでしょうか?

カスタム コンポーネントで使用する

アプリにカスタム コンポーネントがあると仮定します

<template>
  <MovieList
    :movies="movies"
    :genre="genre"
  />
</template>
ログイン後にコピー

テーマ管理を変更するクラスを動的に追加したい場合はどうすればよいですか?実はとても簡単です。

前と同じように

:class 属性を追加するだけです。

<template>
  <MovieList
    :movies="movies"
    :genre="genre"
    :class="darkMode ? &#39;dark-theme&#39; : &#39;light-theme&#39;"
  />
</template>
ログイン後にコピー

これが機能する理由は、Vue が

MovieList## のルート要素に直接配置されているためです。 # クラスをセットアップします。 コンポーネントに

props

を設定すると、Vue はこれらのプロパティを、コンポーネントの props セクションで指定されたプロパティと比較します。一致するものがあれば、通常の小道具として渡されます。それ以外の場合、Vue はそれをルート DOM 要素に追加します。 ここで、

MovieList

class 属性を指定していないため、Vue はルート要素に設定する必要があることを認識しています。 ただし、動的クラス名を使用すると、さらに高度な処理を行うことができます。

クラス名をすばやく生成する

クラス名を動的に追加または削除するさまざまな方法を取り上げてきました。しかし、動的に生成されたクラス名自体はどうなるのでしょうか?

さまざまな種類のボタンすべてに 20 の異なる CSS スタイルを提供する

Button

コンポーネントがあるとします。 <p>你可能不想花一整天的时间把每一项都写出来,也不想把开关的逻辑都写出来。相反,我们将动态生成要应用的类的名称。</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>&lt;template&gt; &lt;span class=&quot;description&quot; :class=&quot;theme&quot; &gt; This is how you add static classes in Vue. &lt;/span&gt; &lt;/template&gt; export default { data() { return { theme: &amp;#39;blue-theme&amp;#39;, }; } }; .blue-theme { color: navy; background: white; }</pre><div class="contentsignin">ログイン後にコピー</div></div><p>我们可以设置一个变量来包含我们想要的任何类名的字符串。如果我们想对<code>Button组件执行此操作,则可以执行以下简单操作:

<template>
  <button
    @click="$emit(&#39;click&#39;)"
    class="button"
    :class="theme"
  >
    {{ text }}
  </button>
</template>

export default {
  props: {
    theme: {
      type: String,
      default: &#39;default&#39;,
    }
  }
};

.default {}

.primary {}

.danger {}
ログイン後にコピー

现在,使用Button组件的任何人都可以将theme属性设置为他们想要使用的任何主题。

如果没有设置任何类,它将添加.default类。如果将其设置为primary,则会添加.primary类。

使用计算属性来简化类

最终,模板中的表达式将变得过于复杂,并将开始变得非常混乱和难以理解。幸运的是,我们有一个简单的解决方案,就是使用计算民属性:

<template>
  <MovieList
    :movies="movies"
    :genre="genre"
    :class="class"
  />
</template>

export default {
  computed: {
    class() {
      return darkMode ? &#39;dark-theme&#39; : &#39;light-theme&#39;;
    }
  }
};
ログイン後にコピー

这不仅易于阅读,而且还可以轻松添加新功能并在将来进行重构。

英文原文地址:https://forum.vuejs.org/t/add-a-dynamically-generated-class-name-to-components-class-attribute-from-mixin/27626

为了保证的可读性,本文采用意译而非直译。

相关推荐:

2020年前端vue面试题大汇总(附答案)

vue教程推荐:2020最新的5个vue.js视频教程精选

更多编程相关知识,请访问:编程教学!!

以上がVueでクラス名を動的に追加する方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VueでBootstrapの使用方法 VueでBootstrapの使用方法 Apr 07, 2025 pm 11:33 PM

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

VUEのボタンに関数を追加する方法 VUEのボタンに関数を追加する方法 Apr 08, 2025 am 08:51 AM

HTMLテンプレートのボタンをメソッドにバインドすることにより、VUEボタンに関数を追加できます。 VUEインスタンスでメソッドを定義し、関数ロジックを書き込みます。

VueでWatchの使用方法 VueでWatchの使用方法 Apr 07, 2025 pm 11:36 PM

Vue.jsの監視オプションにより、開発者は特定のデータの変更をリッスンできます。データが変更されたら、Watchはコールバック関数をトリガーして更新ビューまたはその他のタスクを実行します。その構成オプションには、すぐにコールバックを実行するかどうかを指定する即時と、オブジェクトまたは配列の変更を再帰的に聴くかどうかを指定するDEEPが含まれます。

Vue Multi-Page開発とはどういう意味ですか? Vue Multi-Page開発とはどういう意味ですか? Apr 07, 2025 pm 11:57 PM

VUEマルチページ開発は、VUE.JSフレームワークを使用してアプリケーションを構築する方法です。アプリケーションは別々のページに分割されます。コードメンテナンス:アプリケーションを複数のページに分割すると、コードの管理とメンテナンスが容易になります。モジュール性:各ページは、簡単に再利用および交換するための別のモジュールとして使用できます。簡単なルーティング:ページ間のナビゲーションは、単純なルーティング構成を介して管理できます。 SEOの最適化:各ページには独自のURLがあり、SEOに役立ちます。

Vueによる前のページに戻る方法 Vueによる前のページに戻る方法 Apr 07, 2025 pm 11:30 PM

vue.jsには、前のページに戻る4つの方法があります。$ router.go(-1)$ router.back()outes&lt; router-link to =&quot;/&quot; Component Window.history.back()、およびメソッド選択はシーンに依存します。

vue.jsでJSファイルを参照する方法 vue.jsでJSファイルを参照する方法 Apr 07, 2025 pm 11:27 PM

vue.jsでJSファイルを参照するには3つの方法があります。タグ;; mounted()ライフサイクルフックを使用した動的インポート。 Vuex State Management Libraryを介してインポートします。

VUEトラバーサルの使用方法 VUEトラバーサルの使用方法 Apr 07, 2025 pm 11:48 PM

Vue.jsには配列とオブジェクトを通過するには3つの一般的な方法があります。V-Forディレクティブは、各要素をトラバースしてテンプレートをレンダリングするために使用されます。 V-BindディレクティブをV-Forで使用して、各要素の属性値を動的に設定できます。 .mapメソッドは、配列要素を新しい配列に変換できます。

VueのDivにジャンプする方法 VueのDivにジャンプする方法 Apr 08, 2025 am 09:18 AM

VUEにDIV要素をジャンプするには、VUEルーターを使用してルーターリンクコンポーネントを追加するには、2つの方法があります。 @clickイベントリスナーを追加して、これを呼び出します。$ router.push()メソッドをジャンプします。

See all articles