検索
ホームページウェブフロントエンドjsチュートリアルAngular のコンポーネント スタイルの動作原理に関する簡単な説明

Angular のコンポーネント スタイルの動作原理に関する簡単な説明

Angular コンポーネントの開発プロセスでは、対応する CSS ファイルにコンポーネント スタイルを記述することに慣れていますが、Angular がそれをどのように行うのかを理解したことがありませんでした。 . スタイルの分離。たとえば、コンポーネント A に h1 { color: red } が記述されている場合、このスタイルはコンポーネント A でのみ有効になり、他のコンポーネントには影響しません。この原理を探るためにこの記事を作成しており、以下の内容は Angular CLI バージョン 10.1.1 に基づいています。

コンポーネント スタイルの仕組み

探索

まず、Angular CLI を使用して新しい Angular プロジェクトを作成し、削除します Replace次のコンテンツを含む app.component.html のすべてのコンテンツ:

<h1 id="App-nbsp-Component">App Component</h1>
<button class="red-button">Button</button>

次のコンテンツを app.component.css に追加します:

.red-button {
  color: red;
}

そこで実行は次の HTML コードです:

<app-root _nghost-ydo-c11="" ng-version="10.1.1">
  <h2 id="App-nbsp-component">App component</h2>
  <button _ngcontent-ydo-c11="" class="red-button">Button</button>
</app-root>

app-root 要素に _nghost-ydo-c11 という名前のプロパティがあることがわかります。 app-root には、_ngcontent-ydo-c11 という名前の属性があります。 [関連チュートリアルの推奨事項: "angular チュートリアル"]

それでは、これらの属性は何に使用されるのでしょうか?

わかりやすくするために、まず独立したコンポーネントを作成し、次の内容を含む新しいファイル blue-button.component.ts を作成します。

import { Component } from &#39;@angular/core&#39;;

@Component({
  selector: &#39;app-blue-button&#39;,
  template: `
    <h2 id="Blue-nbsp-button-nbsp-component">Blue button component</h2>
    <button class="blue-button">Button</button>
  `,
  styles: [`
    .blue-button {
      background: blue;
    }
  `]
})
export class BlueButtonComponent {}

に配置します。 app.component.html で実行すると、次の HTML コードが表示されます。

Angular のコンポーネント スタイルの動作原理に関する簡単な説明

app-blue-button# が表示されます。 ##_nghost-xxx で始まる属性と、app-root の他の要素と同じ属性もあります。コンポーネント内の両方の要素には、_ngcontent-yke-c11 という名前の属性があります。

Angular によって生成される属性文字列は実行のたびにランダムであるため、後続のコードに同様の属性が出現する場合は、このスクリーンショットに対応します。

概要

観察を通じて次のように結論付けることができます:

    各コンポーネントのホスト要素には一意の属性が割り当てられます。コンポーネントの処理順序に応じて、例では
  • _nghost_xxx
  • です。各コンポーネント テンプレートの各要素には、コンポーネントに固有の属性も割り当てられます。例では
  • です。 _ngcontent_xxx
では、これらの属性はスタイルの分離にどのように使用されるのでしょうか?

これらのプロパティは CSS と組み合わせることができます。たとえば、例の青いボタンのスタイルを見ると、次の CSS が表示されます:

.blue-button[_ngcontent-yke-c11] {
    background: blue;
}

Angular であることがわかります。このメソッドを使用します。

blue-button クラスは、他のコンポーネントの要素に影響を与えることなく、この属性を持つ要素にのみ適用できます。

Angular のスタイル分離の動作がわかったところで、Angular はどのようにこれを実現するのでしょうか?

アプリが起動すると、Angular はスタイルまたは styleUrls コンポーネントのプロパティを使用して、どのスタイルがどのコンポーネントに関連付けられているかを確認します。次に、Angular はコンポーネント内の要素に固有のスタイルと属性を適用し、生成された CSS コードをスタイル タグでラップしてヘッダーに配置します。

Angular のコンポーネント スタイルの動作原理に関する簡単な説明

上記は、Angular スタイルのカプセル化の原理です。

:host, :host-context, ::ng-deep

実際の開発では、このメカニズムがニーズに完全に一致しない場合があります。いくつかの特別なセレクターが導入されています。

:host

:host 擬似クラス セレクターを使用して、コンポーネント (ホスト要素) 自体に作用します。

たとえば、

app-blue-button に境界線を追加する場合、このコンポーネントのスタイルに次のコードを追加できます:

:host {
  display: block;
  border: 1px solid red;
}

Byランタイムの表示 コード内で、次のコード ブロックを確認できます。

  <style>
    [_nghost-yke-c11] {
      display: block;
      border: 1px solid red;
    }
  </style>

:host-context

コンポーネント ビューの内容に基づく場合もあります

外部 条件付きで適用されるスタイルは便利です。たとえば、ドキュメントの

要素のテーマを表す CSS クラスが存在する場合があり、それに基づいてコンポーネントのスタイルを設定する必要があります。

:host-context() 疑似クラス セレクターを使用できます。 :host() のような形式でも使用されます。現在のコンポーネントのホスト要素の 先祖ノード内で、ドキュメントのルート ノードに至るまでの CSS クラスを検索します。他のセレクターと組み合わせると非常に便利です。

次の例では、祖先要素の CSS クラスが

blue-theme であるか red-theme であるかに基づいて、どの CSS が有効になるかが決まります。

import { Component } from &#39;@angular/core&#39;;

@Component({
  selector: &#39;app-btn-theme&#39;,
  template: `
    <button class="btn-theme">Button</button>
  `,
  styles: [`
    :host-context(.blue-theme) .btn-theme {
      background: blue;
    }
    :host-context(.red-theme) .btn-theme {
      background: red;
    }
  `]
})
export class BtnThemeComponent { }

次に、それが使用される場所:

<div class="blue-theme">
  <app-btn-theme></app-btn-theme>
</div>

実行中、ボタンの背景は青色になります。

::ng-deep

我们经常会使用一些第三方 UI 库,有时候我们想改变第三方组件的一些样式,这时候可以使用 ::ng-deep,但是要注意,Angular 已经把这个特性标记为已废弃了,可能在未来的版本就被完全移除掉。

:host ::ng-deep h2 {
  color: yellow;
}

通过查看运行时的代码:

[_nghost-yke-c12] h2 {
    color: yellow;
}

可以看到,样式会作用在 app-root 里的所有元素上,包括 app-root 中使用的其他组件里的元素。

总结

在实际开发中,灵活使用以上几种方式,基本上可以满足大部分场景。

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

以上がAngular のコンポーネント スタイルの動作原理に関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は掘金社区で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptをインストールするにはどうすればよいですか?JavaScriptをインストールするにはどうすればよいですか?Apr 05, 2025 am 12:16 AM

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

メモ帳++7.3.1

メモ帳++7.3.1

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン