詳細ガイド
コンポーネント

コンポーネントの構造

Tip: このガイドでは、すでに基本概念のガイドを読んでいることを前提としています。Angularを初めて使う場合は、まずそちらをお読みください。

すべてのコンポーネントには次のものが必要です。

  • ユーザー入力の処理やサーバーからのデータ取得などの動作を定義するTypeScriptクラス
  • DOMにレンダリングされる内容を制御するHTMLテンプレート
  • HTMLでコンポーネントがどのように使用されるかを定義するCSSセレクター

TypeScriptクラスの上部に @Component デコレーター を追加することで、コンポーネントにAngular固有の情報を与えます。

      
@Component({  selector: 'profile-photo',  template: `<img src="profile-photo.jpg" alt="Your profile photo">`,})export class ProfilePhoto { }

Angularテンプレートの書き方については、テンプレートガイドを参照してください。

@Component デコレーターに渡されるオブジェクトは、コンポーネントのメタデータと呼ばれます。これには、このガイドで説明されている selectortemplate、その他のプロパティが含まれています。

コンポーネントには、オプションでそのコンポーネントのDOMに適用されるCSSスタイルのリストを含めることができます。

      
@Component({  selector: 'profile-photo',  template: `<img src="profile-photo.jpg" alt="Your profile photo">`,  styles: `img { border-radius: 50%; }`,})export class ProfilePhoto { }

デフォルトでは、コンポーネントのスタイルは、そのコンポーネントのテンプレートで定義された要素にのみ影響を与えます。Angularのスタイリングアプローチの詳細については、コンポーネントのスタイリングを参照してください。

代わりに、テンプレートとスタイルを別々のファイルに書くこともできます。

      
@Component({  selector: 'profile-photo',  templateUrl: 'profile-photo.html',  styleUrl: 'profile-photo.css',})export class ProfilePhoto { }

これにより、プロジェクト内のプレゼンテーション動作の懸念を分離できます。プロジェクト全体で一貫したアプローチを選択することも、コンポーネントごとに使用するものを決定できます。

templateUrlstyleUrl はどちらも、コンポーネントが存在するディレクトリを基準とした相対パスです。

コンポーネントの使用

すべてのコンポーネントはCSSセレクターを定義します。

      
@Component({  selector: 'profile-photo',  ...})export class ProfilePhoto { }

Angularがサポートするセレクターの種類と、セレクターを選択する際のガイダンスについては、コンポーネントセレクターを参照してください。

他のコンポーネントのテンプレートに一致するHTML要素を作成することで、コンポーネントを使用します。

      
@Component({  selector: 'user-profile',  template: `    <profile-photo />    <button>Upload a new profile photo</button>`,  ...,})export class UserProfile { }

テンプレートで他のコンポーネントを参照して使用する方法は、コンポーネントのインポートと使用を参照してください。

Angularは、遭遇した一致するHTML要素ごとに、コンポーネントのインスタンスを作成します。コンポーネントのセレクターに一致するDOM要素は、そのコンポーネントのホスト要素と呼ばれます。コンポーネントのテンプレートの内容は、そのホスト要素内にレンダリングされます。

コンポーネントによってレンダリングされたDOM (コンポーネントのテンプレートに対応)は、 そのコンポーネントのビューと呼ばれます。

このようにコンポーネントを組み合わせることで、Angular アプリケーションはコンポーネントのツリーとして考えることができます

AccountSettings
UserProfile
PaymentInfo
ProfilePic
UserBio

このツリー構造は、依存性の注入子クエリなど、その他のAngularの概念を理解する上で重要です。