Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Como fazer a comunicação entre components no angular?

Olá, Gostaria de saber como fazer a comunicação entre components no angular, segue abaixo:

header.component.html

<h5>{{ titulo }}</h5>

header.component.ts

export class HeaderComponent{
titulo: string = ' Titulo da Pagina';
}

article.component.html

<ul>
  <li><a (click)="pagina1()">pagina 1</a></li>
<li><a (click)="pagina2()">pagina 2</a></li>
<li><a (click)="pagina3()">pagina 3</a></li>
</ul>

article.component.ts

export class ArticleComponent{
titulo: string = ' Titulo da Pagina';

pagina1(){
    this.router.navigate(['pagina1']);
    this.titulo = ' pagina 1';
  }

pagina2(){
    this.router.navigate(['pagina2']);
    this.titulo = ' pagina 2';
  }

pagina3(){
    this.router.navigate(['pagina3']);
    this.titulo = ' pagina 3';
  }

O problema que eu não estou conseguindo alterar o titulo h5 quando clicar no link nas paginas dos components, a barra de navegação header o titulo altere para a pagina em que eu estou.

app.component.html

<app-header></app-header>
<router-outlet></router-outlet>
4 respostas

Fala aí Gabriel, tudo bem? Na verdade para realizar esse tipo de necessidade, você não precisa passar as rotas do article para o header.

Você pode utilizar o a com o [routerLink], mais ou menos assim:

<ul>
    <li><a [routerLink]="[ 'pagina1' ]">pagina 1</a></li>
    <li><a [routerLink]="[ 'pagina2' ]">pagina 2</a></li>
    <li><a [routerLink]="[ 'pagina3' ]">pagina 3</a></li>
</ul>

Uma vez que todas as rotas foram definidas na aplicação e configuradas, isso já deve funcionar.

Espero ter ajudado.

Com relação ao título, sugestão bem simples para o seu caso:

Faça o titulo do Header olhar para uma variável global da aplicação.

Daí cada página alterará esta informação global e isso se refletirá no header.

Caso isso não funcione aí partimos para soluções de comunicação entre os componentes.

Att.

solução!

Eu fiz essa parte que o Matheus Castiglioni informou, sendo que eu passei o parâmetro de url usando:

<h5>{{ titulo }}</h5>


<li><a routerLink="/pagina1" [queryParams]="{titulo :'Nome do Titulo da minha pagina 1 atual'}" >pagina 1</a></li>

Com isso conseguir achar uma solução, pois eu pego o parâmetro e jogo no titulo. Não sei se é uma boa prática mais atendeu ao que eu queria.

Eduardo Ribeiro da Silva, obrigado. Depois eu vejo dessa forma.

Ficou melhor que a minha sugestão.

Parabéns.

Att.