decorator
Decorator that marks a class as an Angular component and provides configuration metadata that determines how the component should be processed, instantiated, and used at runtime.
Option | Description |
---|---|
changeDetection? | The change-detection strategy to use for this component. |
viewProviders? | Defines the set of injectable objects that are visible to its view DOM children. See example. |
moduleId? | The module ID of the module that contains the component. The component must be able to resolve relative URLs for templates and styles. SystemJS exposes the |
templateUrl? | The relative path or absolute URL of a template file for an Angular component. If provided, do not supply an inline template using |
template? | An inline template for an Angular component. If provided, do not supply a template file using |
styleUrls? | One or more relative paths or absolute URLs for files containing CSS stylesheets to use in this component. |
styles? | One or more inline CSS stylesheets to use in this component. |
animations? | One or more animation |
encapsulation? | An encapsulation policy for the component's styling. Possible values:
|
interpolation? | Overrides the default interpolation start and end delimiters ( |
preserveWhitespaces? | True to preserve or false to remove potentially superfluous whitespace characters from the compiled template. Whitespace characters are those matching the |
standalone? | Angular components marked as |
signals? | // TODO(signals): Remove internal and add public documentation. |
imports? | The imports property specifies the standalone component's template dependencies — those directives, components, and pipes that can be used within its template. Standalone components can import other standalone components, directives, and pipes as well as existing NgModules. |
schemas? | The set of schemas that declare elements to be allowed in a standalone component. Elements and properties that are neither Angular components nor directives must be declared in a schema. |
Option | Description |
---|---|
selector? | The CSS selector that identifies this directive in a template and triggers instantiation of the directive. |
inputs? | Enumerates the set of data-bound input properties for a directive |
outputs? | Enumerates the set of event-bound output properties. |
providers? | Configures the injector of this directive or component with a token that maps to a provider of a dependency. |
exportAs? | Defines the name that can be used in the template to assign this directive to a variable. |
queries? | Configures the queries that will be injected into the directive. |
host? | Maps class properties to host element bindings for properties, attributes, and events, using a set of key-value pairs. |
jit? | When present, this directive/component is ignored by the AOT compiler. It remains in distributed code, and the JIT compiler attempts to compile it at run time, in the browser. To ensure the correct behavior, the app must import |
standalone? | Angular directives marked as |
signals? | // TODO(signals): Remove internal and add public documentation |
hostDirectives? | Standalone directives that should be applied to the host whenever the directive is matched. By default, none of the inputs or outputs of the host directives will be available on the host, unless they are specified in the |
Components are the most basic UI building block of an Angular app. An Angular app contains a tree of Angular components.
Angular components are a subset of directives, always associated with a template. Unlike other directives, only one component can be instantiated for a given element in a template.
A component must belong to an NgModule in order for it to be available to another component or application. To make it a member of an NgModule, list it in the declarations
field of the NgModule
metadata.
Note that, in addition to these options for configuring a directive, you can control a component's runtime behavior by implementing life-cycle hooks. For more information, see the Lifecycle Hooks guide.
Further information is available in the Usage Notes...
changeDetection |
---|
The change-detection strategy to use for this component. |
|
When a component is instantiated, Angular creates a change detector, which is responsible for propagating the component's bindings. The strategy is one of:
|
viewProviders |
---|
Defines the set of injectable objects that are visible to its view DOM children. See example. |
|
moduleId |
---|
The module ID of the module that contains the component. The component must be able to resolve relative URLs for templates and styles. SystemJS exposes the |
|
templateUrl |
---|
The relative path or absolute URL of a template file for an Angular component. If provided, do not supply an inline template using |
|
template |
---|
An inline template for an Angular component. If provided, do not supply a template file using |
|
styleUrls |
---|
One or more relative paths or absolute URLs for files containing CSS stylesheets to use in this component. |
|
styles |
---|
One or more inline CSS stylesheets to use in this component. |
|
animations |
---|
One or more animation |
|
encapsulation |
---|
An encapsulation policy for the component's styling. Possible values:
|
|
If not supplied, the value is taken from the If the policy is |
interpolation |
---|
Overrides the default interpolation start and end delimiters ( |
|
preserveWhitespaces |
---|
True to preserve or false to remove potentially superfluous whitespace characters from the compiled template. Whitespace characters are those matching the |
|
standalone |
---|
Angular components marked as |
|
More information about standalone components, directives, and pipes can be found in this guide. |
signals |
---|
// TODO(signals): Remove internal and add public documentation. |
|
imports |
---|
The imports property specifies the standalone component's template dependencies — those directives, components, and pipes that can be used within its template. Standalone components can import other standalone components, directives, and pipes as well as existing NgModules. |
|
This property is only available for standalone components - specifying it for components declared in an NgModule generates a compilation error. More information about standalone components, directives, and pipes can be found in this guide. |
schemas |
---|
The set of schemas that declare elements to be allowed in a standalone component. Elements and properties that are neither Angular components nor directives must be declared in a schema. |
|
This property is only available for standalone components - specifying it for components declared in an NgModule generates a compilation error. More information about standalone components, directives, and pipes can be found in this guide. |
The following example creates a component with two data-bound properties, specified by the inputs
value.
@Component({ selector: 'app-bank-account', inputs: ['bankName', 'id: account-id'], template: ` Bank Name: {{ bankName }} Account Id: {{ id }} ` }) export class BankAccountComponent { bankName: string|null = null; id: string|null = null; // this property is not bound, and won't be automatically updated by Angular normalizedBankName: string|null = null; } @Component({ selector: 'app-my-input', template: ` <app-bank-account bankName="RBC" account-id="4747"> </app-bank-account> ` }) export class MyInputComponent { }
The following example shows two event emitters that emit on an interval. One emits an output every second, while the other emits every five seconds.
@Directive({selector: 'app-interval-dir', outputs: ['everySecond', 'fiveSecs: everyFiveSeconds']}) export class IntervalDirComponent { everySecond = new EventEmitter<string>(); fiveSecs = new EventEmitter<string>(); constructor() { setInterval(() => this.everySecond.emit('event'), 1000); setInterval(() => this.fiveSecs.emit('event'), 5000); } } @Component({ selector: 'app-my-output', template: ` <app-interval-dir (everySecond)="onEverySecond()" (everyFiveSeconds)="onEveryFiveSeconds()"> </app-interval-dir> ` }) export class MyOutputComponent { onEverySecond() { console.log('second'); } onEveryFiveSeconds() { console.log('five seconds'); } }
The following simple example injects a class into a component using the view provider specified in component metadata:
class Greeter { greet(name:string) { return 'Hello ' + name + '!'; } } @Directive({ selector: 'needs-greeter' }) class NeedsGreeter { greeter:Greeter; constructor(greeter:Greeter) { this.greeter = greeter; } } @Component({ selector: 'greet', viewProviders: [ Greeter ], template: `<needs-greeter></needs-greeter>` }) class HelloWorld { }
Removing whitespace can greatly reduce AOT-generated code size and speed up view creation. As of Angular 6, the default for preserveWhitespaces
is false (whitespace is removed). To change the default setting for all components in your application, set the preserveWhitespaces
option of the AOT compiler.
By default, the AOT compiler removes whitespace characters as follows:
<button>Action 1</button> <button>Action 2</button>
becomes:
<button>Action 1</button><button>Action 2</button>
<span>\n some text\n</span>
becomes <span> some text </span>
.<pre>
or <textarea>
, where whitespace characters are significant.Note that these transformations can influence DOM nodes layout, although impact should be minimal.
You can override the default behavior to preserve whitespace characters in certain fragments of a template. For example, you can exclude an entire DOM sub-tree by using the ngPreserveWhitespaces
attribute:
<div ngPreserveWhitespaces> whitespaces are preserved here <span> and here </span> </div>
You can force a single space to be preserved in a text node by using &ngsp;
, which is replaced with a space character by Angular's template compiler:
<a>Spaces</a>&ngsp;<a>between</a>&ngsp;<a>links.</a> <!-- compiled to be equivalent to: <a>Spaces</a> <a>between</a> <a>links.</a> -->
Note that sequences of &ngsp;
are still collapsed to just one space character when the preserveWhitespaces
option is set to false
.
<a>before</a>&ngsp;&ngsp;&ngsp;<a>after</a> <!-- compiled to be equivalent to: <a>before</a> <a>after</a> -->
To preserve sequences of whitespace characters, use the ngPreserveWhitespaces
attribute.
© 2010–2023 Google, Inc.
Licensed under the Creative Commons Attribution License 4.0.
https://angular.io/api/core/Component