Componentes Aninhados - Angular
Além dos componentes principais em uma aplicação, também podemos definir componentes auxiliares que gerenciam uma parte específica da marcação HTML. Em uma página, é comum termos diversos blocos com tarefas específicas, e para cada um desses blocos podemos criar um componente separado para simplificar o gerenciamento.
Vamos adicionar um segundo componente ao projeto. Para isso, criaremos um novo arquivo chamado child.component.ts
src/app
helloapp/ ├── src/ │ ├── app/ │ │ ├── app.component.ts │ │ ├── child.component.ts │ ├── main.ts │ ├── index.html ├── angular.json ├── package-lock.json ├── package.json └── tsconfig.json
No arquivo child.component.ts
import { Component } from "@angular/core";
@Component({
selector: 'child-comp',
standalone: true,
template: `<h2>ChildComponent Header</h2>`
})
export class ChildComponent {}
Aqui, definimos a classe ChildComponent
@Component
standalone: true
O componente gerenciará a marcação HTML que será inserida no elemento child-comp
Agora, vamos definir no arquivo app.component.ts
AppComponent
import { Component } from "@angular/core";
import { ChildComponent } from './child.component';
@Component({
selector: "my-app",
standalone: true,
imports: [ChildComponent],
template: `<h1>AppComponent Header</h1>
<child-comp></child-comp>`,
})
export class AppComponent {}
Este é o componente principal que será iniciado ao carregar a aplicação, e através dele utilizaremos os demais componentes. O ChildComponent
child-comp
AppComponent
AppComponent
ChildComponent
import { ChildComponent } from './child.component';
//..................................
imports: [ChildComponent],
No arquivo main.ts
AppComponent
import { bootstrapApplication } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';
bootstrapApplication(AppComponent);
Assim, ao carregar a aplicação, o componente principal será carregado, o qual, por sua vez, carregará o ChildComponent

Ao utilizar componentes filhos, é importante lembrar que eles formam seu próprio contexto, no qual definem suas variáveis, funções, estilos, etc. Por exemplo, vamos definir o seguinte código no arquivo child.component.ts
import { Component } from "@angular/core";
@Component({
selector: 'child-comp',
standalone: true,
template: `<h2>Hello from {{name}}!</h2>`,
styles: [`h2{color:red;}`]
})
export class ChildComponent {
name = "ChildComponent";
}
Aqui, o template do componente exibe no cabeçalho o valor da variável name
h2
Agora, vamos modificar o código do AppComponent no arquivo app.component.ts
import { Component } from "@angular/core";
import { ChildComponent } from './child.component';
@Component({
selector: "my-app",
standalone: true,
imports: [ChildComponent],
template: `<h2>Hello from {{name}}</h2>
<child-comp></child-comp>`,
styles: ["h2 {color:black;}"]
})
export class AppComponent {
name = "AppComponent";
}
No AppComponent
name
h2
E, ao executarmos o projeto, veremos que os estilos de um componente não se aplicam ao outro. Cada componente define sua própria área com o template, sua própria representação que ele gerencia.

Além disso, cada componente usa seu próprio valor da propriedade name
ng-content
O elemento ng-content
ChildComponent
import { Component } from "@angular/core";
@Component({
selector: 'child-comp',
standalone: true,
template: `<ng-content></ng-content>
<p>Hello from {{name}}!</p>`,
styles: [`h2 {color:red;}`]
})
export class ChildComponent {
name = "ChildComponent";
}
No lugar do elemento <ng-content>
E vamos alterar o código do componente principal
AppComponent
import { Component } from "@angular/core";
import { ChildComponent } from './child.component';
@Component({
selector: "my-app",
standalone: true,
imports: [ChildComponent],
template: `<child-comp><h2>Hello from {{name}}</h2></child-comp>`,
styles: ["h2 {color:black;}"]
})
export class AppComponent {
name = "AppComponent";
}
No elemento <child-comp>
{{name}}</h2>
<ng-content>

nesse caso, o gerenciamento dos estilos que são aplicados ao conteúdo injetado é feito pelo componente pai.