Angular-Loiane-Training

Este repositorio contem exemplos documentados e descricoes dos conteudos estudados ao longo do curso de Angular da Loiane

View project on GitHub

Defininido e Extraindo Paramatros de URL (Query Params)

Parametros de query em uma URL sao utilizados normalmente para organizar ou filtrar recursos, para identificar os parametros sao separados do path param (utilizado para especificar qual recurso da API esta sento solicitado), por ? e designados por chave e valor conforme o exemplo


exemplo de URL com query params.

#

Incluindo parametros de query nas rotas

Alem da diretiva routerLink o Angular tambem possui a diretiva queryParams que e utilizada para passar os parametros de query para a rota, conforme o exemplo.

...

<li routerLinkActive="active"><a routerLink="/cursos" [queryParams]="{pagina:1}">Cursos</a></li>

...


exemplo de URL com _query params_.

#

Extraindo parametros de query nas rotas

A extracao dos query params ocorre de forma similar aos path params (parametros de rota) por meio da classe ActivatedRoute. uma variavel com o identificador pagina do tipo number sera utilizada para armazenar o valor do query param. Lembrando que para manter as boas praticas de codigo a inscricao sera armazenada em um objeto do tipo Subscription para que possa ser realizada a desinscricao no momento da destruicao do objeto.

...

import { Subscription } from 'rxjs';
import { CursosServiceService } from './cursos-service.service';
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-cursos',
  templateUrl: './cursos.component.html',
  styleUrls: ['./cursos.component.css']
})
export class CursosRotasComponent implements OnInit {

  ...

  pagina: number = 0
  inscricao: Subscription

  constructor(
    ...
    private _route: ActivatedRoute) {

  }

  ngOnInit(): void {
    
    ...

    // atributo queryParams da classe ActivatedRoute
    this.inscricao = this._route.queryParams.subscribe( 
      (queryParams: any) => {
        this.pagina = queryParams['pagina']
      }

    )
  }

  ngOnDestroy(){
    this.inscricao.unsubscribe()
  }

  proximaPagina(): void {
    this.pagina++
  }
}

um botao no template HTML sera utilizado para chamar o metodo proximaPagina() e a variavel pagina sera exibida por meio de interpolacao.

<p>Lista de Cursos</p>
<p>Pagina: </p>
<div class="collection">
    <a class="collection-item"
    *ngFor="let curso of cursos"
    [routerLink]="['/curso', curso.id]">
        
    </a>
</div>
<button (click)="proximaPagina()">Proxima Pagina</button>


#

Utilizando navegacao imperativa com os query params

vamos incluir a classe Router e utilizar o metodo navigate

...

import { ActivatedRoute, Router } from '@angular/router';

...

  constructor(
    ...
    private _router: Router) {
  }

  ...

  proximaPagina(): void {

    // navegacao imperativa
    this._router.navigate(
      ['/cursos'],
      {
        queryParams: {
          'pagina': ++this.pagina
        }
      }
    )
  }

}