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="'description'"> This is how you add static classes in Vue. </span> </template>
v-bind 構文が JS 値として渡すものをすべて受け入れるためです。引用符を追加すると、Vue がそれを文字列として扱うようになります。
v-bind:
<template> <span :class="'description'"> 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: 'blue-theme', }; } }; ---------------------------------------- .blue-theme { color: navy; background: white; }
theme がコンテンツです。クラス名の変数を適用します。
v-bind は任意の JS 式を受け入れることができるため、これを使用して非常に優れた処理を行うことができます。私のお気に入りは、テンプレートで三項式を使用することです。これは非常にクリーンで読みやすい傾向があります。
<template> <span class="description" :class="darkMode ? 'dark-theme' : 'light-theme'" > This is how you add dynamic classes in Vue. </span> </template>
darkMode が
true の場合、
dark-theme がクラス名として使用されます。それ以外の場合は、
ライトテーマを選択します。
<template> <span class="description" :class="[ fontTheme, darkMode ? 'dark-theme' : 'light-theme', ]" > This is how you add dynamic classes in Vue. </span> </template>
fontTheme の値は、フォントの外観を変更するクラス名です。前の例では、
darkMode 変数を使用して、
dark-theme と
light-theme を切り替えることができます。
<template> <span class="description" :class="{ 'dark-theme': darkMode, 'light-theme': !darkMode, ]" > This is how you add dynamic classes in Vue. </span> </template>
dark-theme と
light-theme という 2 つのキーが含まれています。以前に実装したロジックと同様に、
darkMode の値に基づいてこれらのテーマを切り替えたいと考えています。
darkMode が
true の場合、
dark-theme が動的クラス名として要素に適用されます。ただし、
!darkMode 値が
false であるため、
light-them は適用されません。
<template> <MovieList :movies="movies" :genre="genre" /> </template>
:class 属性を追加するだけです。
<template> <MovieList :movies="movies" :genre="genre" :class="darkMode ? 'dark-theme' : 'light-theme'" /> </template>
MovieList## のルート要素に直接配置されているためです。 # クラスをセットアップします。 コンポーネントに
を設定すると、Vue はこれらのプロパティを、コンポーネントの props
セクションで指定されたプロパティと比較します。一致するものがあれば、通常の小道具として渡されます。それ以外の場合、Vue はそれをルート DOM 要素に追加します。 ここで、
は class
属性を指定していないため、Vue はルート要素に設定する必要があることを認識しています。 ただし、動的クラス名を使用すると、さらに高度な処理を行うことができます。
クラス名をすばやく生成する
クラス名を動的に追加または削除するさまざまな方法を取り上げてきました。しかし、動的に生成されたクラス名自体はどうなるのでしょうか?
さまざまな種類のボタンすべてに 20 の異なる CSS スタイルを提供する
Button コンポーネントがあるとします。 <p>你可能不想花一整天的时间把每一项都写出来,也不想把开关的逻辑都写出来。相反,我们将动态生成要应用的类的名称。</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><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;
}</pre><div class="contentsignin">ログイン後にコピー</div></div><p>我们可以设置一个变量来包含我们想要的任何类名的字符串。如果我们想对<code>Button
组件执行此操作,则可以执行以下简单操作:
<template> <button @click="$emit('click')" class="button" :class="theme" > {{ text }} </button> </template> export default { props: { theme: { type: String, default: 'default', } } }; .default {} .primary {} .danger {}
现在,使用Button
组件的任何人都可以将theme
属性设置为他们想要使用的任何主题。
如果没有设置任何类,它将添加.default
类。如果将其设置为primary
,则会添加.primary
类。
使用计算属性来简化类
最终,模板中的表达式将变得过于复杂,并将开始变得非常混乱和难以理解。幸运的是,我们有一个简单的解决方案,就是使用计算民属性:
<template> <MovieList :movies="movies" :genre="genre" :class="class" /> </template> export default { computed: { class() { return darkMode ? 'dark-theme' : 'light-theme'; } } };
这不仅易于阅读,而且还可以轻松添加新功能并在将来进行重构。
英文原文地址:https://forum.vuejs.org/t/add-a-dynamically-generated-class-name-to-components-class-attribute-from-mixin/27626
为了保证的可读性,本文采用意译而非直译。
相关推荐:
更多编程相关知识,请访问:编程教学!!
以上がVueでクラス名を動的に追加する方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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